{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Mean-variance optimization\n",
    "\n",
    "In this cookbook recipe, we work on several examples demonstrating PyPortfolioOpt's mean-variance capabilities. I will discuss what I think should be your \"default\" options, based on my experience in optimising portfolios.\n",
    "\n",
    "To start, you need a list of tickers. Some people just provide the whole universe of stocks, but I don't think this is a good idea - portfolio optimization is quite different from asset selection. I would suggest anywhere from 10-50 stocks as a starting point.\n",
    "\n",
    "Some of the things we cover:\n",
    "\n",
    "- Downloading data and getting it into PyPortfolioOpt\n",
    "- Calculating and visualising the covariance matrix\n",
    "- Optimising a long/short portfolio to minimise total variance\n",
    "- Optimising a portfolio to maximise the Sharpe ratio, subject to sector constraints\n",
    "- Optimising a portfolio to maximise return for a given risk, subject to sector constraints, with an L2 regularisation objective\n",
    "- Optimising a market-neutral portfolio to minimise risk for a given level of return\n",
    "- Optimising along the mean-semivariance frontier\n",
    "- Optimising along the mean-CVaR frontier\n",
    "- Plotting the efficient frontier:\n",
    "    - Simple (using CLA)\n",
    "    - Constrained\n",
    "    - Complex plots\n",
    "\n",
    "Please consult the [docs](https://pyportfolioopt.readthedocs.io/) for more info.\n",
    "\n",
    "## Downloading data\n",
    "\n",
    "To download data, we will use `yfinance`, an excellent library that provides free price data from Yahoo Finance, no API key needed."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import yfinance as yf\n",
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "tickers = [\"MSFT\", \"AMZN\", \"KO\", \"MA\", \"COST\", \n",
    "           \"LUV\", \"XOM\", \"PFE\", \"JPM\", \"UNH\", \n",
    "           \"ACN\", \"DIS\", \"GILD\", \"F\", \"TSLA\"] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "[*********************100%***********************]  15 of 15 completed\n"
     ]
    }
   ],
   "source": [
    "ohlc = yf.download(tickers, period=\"max\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ACN</th>\n",
       "      <th>AMZN</th>\n",
       "      <th>COST</th>\n",
       "      <th>DIS</th>\n",
       "      <th>F</th>\n",
       "      <th>GILD</th>\n",
       "      <th>JPM</th>\n",
       "      <th>KO</th>\n",
       "      <th>LUV</th>\n",
       "      <th>MA</th>\n",
       "      <th>MSFT</th>\n",
       "      <th>PFE</th>\n",
       "      <th>TSLA</th>\n",
       "      <th>UNH</th>\n",
       "      <th>XOM</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2021-02-08</th>\n",
       "      <td>257.309998</td>\n",
       "      <td>3322.939941</td>\n",
       "      <td>359.829987</td>\n",
       "      <td>190.000000</td>\n",
       "      <td>11.56</td>\n",
       "      <td>67.970001</td>\n",
       "      <td>140.139999</td>\n",
       "      <td>49.919998</td>\n",
       "      <td>52.240002</td>\n",
       "      <td>337.029999</td>\n",
       "      <td>242.470001</td>\n",
       "      <td>34.820000</td>\n",
       "      <td>863.419983</td>\n",
       "      <td>324.339996</td>\n",
       "      <td>51.230000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-09</th>\n",
       "      <td>257.679993</td>\n",
       "      <td>3305.000000</td>\n",
       "      <td>359.559998</td>\n",
       "      <td>188.210007</td>\n",
       "      <td>11.93</td>\n",
       "      <td>67.300003</td>\n",
       "      <td>139.580002</td>\n",
       "      <td>49.700001</td>\n",
       "      <td>51.180000</td>\n",
       "      <td>333.440002</td>\n",
       "      <td>243.770004</td>\n",
       "      <td>34.970001</td>\n",
       "      <td>849.460022</td>\n",
       "      <td>329.630005</td>\n",
       "      <td>50.630001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-10</th>\n",
       "      <td>256.940002</td>\n",
       "      <td>3286.580078</td>\n",
       "      <td>356.119995</td>\n",
       "      <td>189.630005</td>\n",
       "      <td>11.76</td>\n",
       "      <td>67.290001</td>\n",
       "      <td>139.660004</td>\n",
       "      <td>49.599998</td>\n",
       "      <td>51.279999</td>\n",
       "      <td>334.209991</td>\n",
       "      <td>242.820007</td>\n",
       "      <td>34.740002</td>\n",
       "      <td>804.820007</td>\n",
       "      <td>333.399994</td>\n",
       "      <td>51.119999</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-11</th>\n",
       "      <td>258.970001</td>\n",
       "      <td>3262.129883</td>\n",
       "      <td>352.200012</td>\n",
       "      <td>190.910004</td>\n",
       "      <td>11.45</td>\n",
       "      <td>66.919998</td>\n",
       "      <td>139.270004</td>\n",
       "      <td>50.299999</td>\n",
       "      <td>51.419998</td>\n",
       "      <td>342.869995</td>\n",
       "      <td>244.490005</td>\n",
       "      <td>34.430000</td>\n",
       "      <td>811.659973</td>\n",
       "      <td>333.070007</td>\n",
       "      <td>49.840000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-12</th>\n",
       "      <td>257.470001</td>\n",
       "      <td>3277.709961</td>\n",
       "      <td>352.750000</td>\n",
       "      <td>187.669998</td>\n",
       "      <td>11.45</td>\n",
       "      <td>66.889999</td>\n",
       "      <td>141.250000</td>\n",
       "      <td>50.689999</td>\n",
       "      <td>51.340000</td>\n",
       "      <td>341.000000</td>\n",
       "      <td>244.990005</td>\n",
       "      <td>34.720001</td>\n",
       "      <td>816.119995</td>\n",
       "      <td>328.239990</td>\n",
       "      <td>50.520000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   ACN         AMZN        COST         DIS      F       GILD  \\\n",
       "Date                                                                            \n",
       "2021-02-08  257.309998  3322.939941  359.829987  190.000000  11.56  67.970001   \n",
       "2021-02-09  257.679993  3305.000000  359.559998  188.210007  11.93  67.300003   \n",
       "2021-02-10  256.940002  3286.580078  356.119995  189.630005  11.76  67.290001   \n",
       "2021-02-11  258.970001  3262.129883  352.200012  190.910004  11.45  66.919998   \n",
       "2021-02-12  257.470001  3277.709961  352.750000  187.669998  11.45  66.889999   \n",
       "\n",
       "                   JPM         KO        LUV          MA        MSFT  \\\n",
       "Date                                                                   \n",
       "2021-02-08  140.139999  49.919998  52.240002  337.029999  242.470001   \n",
       "2021-02-09  139.580002  49.700001  51.180000  333.440002  243.770004   \n",
       "2021-02-10  139.660004  49.599998  51.279999  334.209991  242.820007   \n",
       "2021-02-11  139.270004  50.299999  51.419998  342.869995  244.490005   \n",
       "2021-02-12  141.250000  50.689999  51.340000  341.000000  244.990005   \n",
       "\n",
       "                  PFE        TSLA         UNH        XOM  \n",
       "Date                                                      \n",
       "2021-02-08  34.820000  863.419983  324.339996  51.230000  \n",
       "2021-02-09  34.970001  849.460022  329.630005  50.630001  \n",
       "2021-02-10  34.740002  804.820007  333.399994  51.119999  \n",
       "2021-02-11  34.430000  811.659973  333.070007  49.840000  \n",
       "2021-02-12  34.720001  816.119995  328.239990  50.520000  "
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prices = ohlc[\"Adj Close\"].dropna(how=\"all\")\n",
    "prices.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3MAAAIiCAYAAABi7JGcAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAD/FUlEQVR4nOzdd3hUVf7H8fdNb7RAqCEQkN4iYEFREEUQUOwg6oLdFdva2yrWXX/WtS+uihVEFBuKgoiKigqK9G7ohIRAep/7++PMZGbSyySTkM/refKcc8899853eBT4cppl2zYiIiIiIiLSuAT4OwARERERERGpPiVzIiIiIiIijZCSORERERERkUZIyZyIiIiIiEgjpGRORERERESkEVIyJyIiIiIi0ggF+TuAirRp08bu2rWrv8MQERERERHxi5UrV6bYth1T1r0Gncx17dqVFStW+DsMERERERERv7Asa0d59zTNUkREREREpBFSMiciIiIiItIIKZkTERERERFphBr0mrmyFBQUsHv3bnJzc/0dit+EhYURGxtLcHCwv0MRERERERE/aXTJ3O7du2nWrBldu3bFsix/h1PvbNvm4MGD7N69m/j4eH+HIyIiIiIiftLoplnm5ubSunXrJpnIAViWRevWrZv0yKSIiIiIiDTCZA5osomcS1P//iIiIiIi0kiTuYbi448/xrIsNm7cWNz266+/cvLJJ9OrVy+OPvporrzySrKzs5k1axYBAQGsXr26uG///v1JTEz0Q+QiIiIiItLYKZmrhdmzZzN8+HBmz54NQFJSEhdccAGPP/44mzZt4o8//mDs2LFkZGQAEBsby6OPPurPkEVERERE5AihZK6GMjMzWbZsGa+99hpz5swB4MUXX2Tq1KkMGzasuN/5559Pu3btAJgwYQLr1q1j06ZNfolZRERERESOHI1uN0tPD362jvV70336zr4dm/PAmf0q7ffJJ58wduxYevbsSevWrVm5ciVr165l6tSp5T4TEBDAHXfcwWOPPcabb77py7BFRERERKSJ0chcDc2ePZvJkycDMHny5OKplpWZMmUKy5cv56+//qrL8ERERERE5AjXqEfmqjKCVhdSU1NZsmQJa9aswbIsioqKsCyLqVOnsnLlSiZOnFjus0FBQdx66608/vjj9RixiIiIiIgcaTQyVwPz5s3j0ksvZceOHSQmJrJr1y7i4+M57bTTePPNN/nll1+K+3700UckJSV5PT9t2jQWL15McnJyfYcuIiIiIiJHCCVzNTB79mzOOeccr7bzzjuPOXPmMGfOHG677TZ69epFnz59+Oqrr2jWrJlX35CQEG688UYOHDhQn2GLiIiIiMgRxLJt298xlGvo0KH2ihUrvNo2bNhAnz59/BRRw6FfBxERERGRI59lWStt2x5a1j2NzImIiIiIiDRCSuZEREREREQaISVzIiIiIiIijZCSORERERERkarY8Dls/cbfURSrNJmzLCvMsqxfLcv607KsdZZlPehsn2VZ1l+WZa1y/iQ42y3Lsp6zLGurZVmrLcsa7PGuqZZlbXH+TK2zbyUiIiIiIuJr718M75zr7yiKVeXQ8DxglG3bmZZlBQPLLMv60nnvdtu255XofwbQw/lzHPAycJxlWdHAA8BQwAZWWpb1qW3bh3zxRURERERERJqSSkfmbCPTeRns/KnoPIOJwFvO55YDLS3L6gCMARbZtp3qTOAWAWNrF75/ffzxx1iWxcaNGwFITEzEsizuu+++4j4pKSkEBwdz/fXXAzBmzBgSEhKKfzp27Mhxxx0HmMPEO3XqRF5eXvGzXbt2rd8vJSIiIiIijUKV1sxZlhVoWdYq4AAmIfvFeetR51TKZyzLCnW2dQJ2eTy+29lWXnujNXv2bIYPH87s2bOL2+Lj41mwYEHx9QcffEC/fv2Kr7/66itWrVrFqlWr+PHHH2nevDmPPPJI8f3AwEBef/31+vkCIiIiIiLSaFUpmbNtu8i27QQgFjjWsqz+wN1Ab+AYIBq40xcBWZZ1tWVZKyzLWpGcnOyLV9aJzMxMli1bxmuvvcacOXOK2yMiIujTpw+uw87ff/99LrzwwjLfcdNNNzFu3DhGjx5d3HbzzTfzzDPPUFhYWLdfQEREREREGrWqrJkrZtv2YcuyvgXG2rb9pLM5z7KsN4DbnNd7gM4ej8U62/YAI0u0Ly3jM2YCMwGGDh1a0XRO+PIu2L+mOl+hcu0HwBn/rrTbJ598wtixY+nZsyetW7dm5cqVtG7dGoDJkyczZ84c2rVrR2BgIB07dmTv3r1ez3/00UesWLGCX375xas9Li6O4cOH8/bbb3PmmWf67nuJiIiIiMgRpSq7WcZYltXSWQ8HRgMbnevgsCzLAs4G1jof+RT4m3NXy+OBNNu29wFfAadbltXKsqxWwOnOtkZp9uzZTJ48GTDJm+dUy7Fjx7Jo0SLmzJnDpEmTSj27Z88ebrrpJt577z1CQ0NL3b/77rt54okncDgcdfcFRERERESk6hrg382rMjLXAXjTsqxATPI317btzy3LWmJZVgxgAauAa539vwDGAVuBbOAyANu2Uy3Lehj4zdnvIdu2U2sVfRVG0OpCamoqS5YsYc2aNViWRVFREZZlMX36dABCQkIYMmQITz31FOvXr+fTTz8tfta2baZOncpdd91F3759y3x/jx49SEhIYO7cufXyfUREREREpBKFuf6OoJRKkznbtlcDR5fRPqqc/jYwvZx7rwONfnePefPmcemll/Lf//63uG3EiBHs2uXe3+XWW29lxIgRREdHez375JNPEhYWVpz4lefee+9l/Pjxvg1cRERERERqpjEmc1La7NmzufNO7/1ezjvvPP71r38VX/fr189rF0uX++67j9jYWBISEorbWrVqxbfffuvVr1+/fgwePJjff//dt8GLiIiIiEj1FeT4O4JSLDOQ1jANHTrUdu0K6bJhwwb69Onjp4gaDv06iIiIiIjUo7UfwbzLTH1GWun7O36G7IPQZ4JPP9ayrJW2bQ8t655G5kRERERERCricLgTufK8MdaUZSV6daRK58yJiIiIiIg0WY6GeQa0kjkREREREZGKeCZzgaWPFvMXJXMiIiIiIiIVsYvc9fCWfgujJCVzIiIiIiIiFfGaZmn5LYySlMyJiIiIiIhUxOExMuc5SudnSuZqaP/+/UyePJnu3bszZMgQxo0bx+bNm1m3bh2jRo2iV69e9OjRg4cffhjX8Q9JSUlMmDCBQYMG0bdvX8aNG8eaNWtISEggISGB6Oho4uPjSUhI4LTTTvPzNxQREREREcB7ZM7RcJI5HU1QA7Ztc8455zB16lTmzJkDwJ9//klSUhLTpk3j5Zdf5vTTTyc7O5vzzjuPl156ienTp3P//fczevRobrrpJgBWr17NgAEDWLVqFQDTpk1jwoQJnH/++f76aiIiIiIiUpIrgQsKr3xkzuGAAB+Mma2aDd1HVdhFI3M18O233xIcHMy1115b3DZo0CA2b97MiSeeyOmnnw5AREQEL7zwAv/+978B2LdvH7GxscXPDBw4sH4DFxERERGR6nONzAWFmGStpKLC0n1rIzMZPr4W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wFzbtj+3LGs9MMeyrEeAP4DXnP1fA952bnCSitnBEtu211mWNRdYDxQC053TNxulDh06MGfOnDLvjRw5EoBp06Yxbdq0UvcTExPrLjAREREREak618hceEtTBgRB6+4VPxPQSJI527ZXA0eX0b4dsxtlyfZc4IJy3vUo8Gj1wxQREREREakDrmQuzDkyF1LB+XIujWhkTkRERERE5MjkSuZCImHsv6H7qMqfCfBIo4LC6yauKlAyJyIiIiIiTZdrzVxwGBz/96o9Y1lwzn8h9hgI0MiciIiIiIhI/XONzAWFVe+5QZN9H0s1+S+NFBERERER8beaJnMNgJI5ERERERFpupTMNT1RUVEkJiYSHh5OQkICffv25dprr8XhcJCYmIhlWdx3333F/VNSUggODub666/3Y9QiIiIiIuLFtWYuKNS/cdSAkrla6t69O6tWrWL16tWsX7+ejz/+GID4+HgWLFhQ3O+DDz6gX79+fopSRERERETKVJhrRuUsy9+RVJuSOR8JCgrihBNOYOvWrQBERETQp08fVqxYAcD777/PhRde6M8QRURERESkJFcy1wg16t0sD3+2jfy9WT59Z0jHSFqeWcmJ72XIzs7mm2++4aGHHipumzx5MnPmzKFdu3YEBgbSsWNH9u7d68twRURERESkNpTMNV3btm0jISEBy7KYOHEiZ5xxBomJiQCMHTuWf/7zn7Rr145Jkyb5N1ARERERESmtMB+CQvwdRY006mSuJiNovuZaM1eWkJAQhgwZwlNPPcX69ev59NNP6zc4ERERERGpmKMAAoL9HUWNNOpkrjG49dZbGTFiBNHR0f4ORURERERESioqgEAlc01GYWEhoaFV27q0X79+2sVSRERERKShchRqZK4pWbduHd27d6dr166sXbu21P3y2qdNm8a0adPqIUIREREREamSogIIbJxpkY4mqKZXXnmFiy66iEceecTfoYiIiIiISG1pzVzTce2113Lttdf6OwwREREREfGFosJGu2ZOI3MiIiIiItJ0OQogoHGOcSmZExERERGRpqsR72apZE5ERERERJquRrxmTsmciIiIiIg0XdrNsmmJiooqrn/xxRf07NmTHTt2sHv3biZOnEiPHj3o3r07N910E/n5+X6MVEREREREKlRUAIEh/o6iRpTM1cI333zDjTfeyJdffklcXBznnnsuZ599Nlu2bGHz5s1kZmZy7733+jtMEREREREpj6ZZNj3ff/89V111FZ9//jndu3dnyZIlhIWFcdlllwEQGBjIM888w+uvv052drafoxURERERkTIVFTbaaZaNM2qnL7/8kv379/v0ne3bt+eMM86osE9eXh5nn302S5cupXfv3gCsW7eOIUOGePVr3rw5cXFxbN26lYEDB/o0ThERERER8QGNzDUtwcHBnHDCCbz22mv+DkVERERERGoifR88GA1ZyY32aIJGPTJX2QhaXQkICGDu3LmceuqpPPbYY9xzzz307duXefPmefVLT09n586dHHXUUX6JU0REREREyrH9W7CLTF0jc01LREQECxYs4N133+W1117j1FNPJTs7m7feeguAoqIibr31VqZNm0ZERISfoxURERERES+eCVwjXTOnZK4WoqOjWbhwIY888gifffYZ8+fP54MPPqBHjx707NmTsLAwHnvsMX+HKSIiIiIiJXkmcI10ZK5xpqB+lpmZWVzv3Lkzf/31V/H1Z5995o+QRERERESkOrxG5hpnMqeRORERERERaXpsh7se0DjHuJTMiYiIiIhI01OU765rZE5ERERERKSRyEt31xvpmjklcyIiIiIi0vRkHnDXNTInIiIiIiLSSGQmuetaMyciIiIiItJIeI7MZaX4L45aUDJXA1FRUV7XiYmJ9O/f36ttxowZPPnkk7z55ptcdNFFXvdSUlKIiYkhLy+vzmMVEREREZEyZOyH8GhTj+np31hqSMlcHTvnnHNYtGgR2dnZxW3z5s3jzDPPJDQ01I+RiYiIiIg0YZkHoMfpcPce6HOWv6OpESVzdax58+aMGDHC6zDxOXPmlBqtExERERGRemLbZs1cVFsIjQLL8ndENdI4V/o5bd78MBmZG3z6zmZRfejZ858+fedFF13Eu+++y6RJk9i7dy+bN29m1KhRPv0MERERERGpAkcRHN4BRXnQrL2/o6kVjcz5gFVOJu9qHz9+PD/++CPp6enMnTuX8847j8DAwPoMUUREREREAL68A5472tSj2vk3llpq1CNzvh5Bq6nWrVtz6NAhr7bU1FTi4+MBCA8PZ+zYscyfP585c+bw9NNP+yNMERERERFZ84G7HtHaf3H4gEbmfCAqKooOHTqwZMkSwCRyCxcuZPjw4cV9LrroIp5++mmSkpIYNmyYv0IVEREREWnabNtdD23mvzh8QMlcDWRnZxMbG1v88/TTT/PWW2/x8MMPk5CQwKhRo3jggQfo3r178TOjR49m7969TJo0qdxpmSIiIiIiUsdsh7seHO6/OHygUU+z9BeHw1Fm+7ffflvuM0FBQSQnJ9dVSCIiIiIiUhWeI3ONPJnTyJyIiIiIiDQdXiNzkf6LwweUzImIiIiISNNxBE2zVDInIiIiIiJNh1cyF+G/OHxAyZyIiIiIiDQhHmvmAhv3FiJK5kREREREpOmwy97MsDFSMiciIiIiIk2HkrmmzbIsLrnkkuLrwsJCYmJimDBhgle/s88+m+OPP76+wxMRERERkcpEtfN3BLWmZK4GIiMjWbt2LTk5OQAsWrSITp06efU5fPgwK1euJC0tje3bt/sjTBERERERKSnIuYNleLR/4/ABJXM1NG7cOBYsWADA7Nmzueiii7zuf/TRR5x55plMnjyZOXPm+CNEEREREREpqZlzRG7A+f6Nwwca9fYt/9yym7WZOT59Z/+ocB7uEVtpv8mTJ/PQQw8xYcIEVq9ezeWXX84PP/xQfH/27Nncf//9tGvXjvPOO4977rnHp3GKiIiIiEgNRMaYIwlOutXfkdRapSNzlmV1tizrW8uy1luWtc6yrJuc7TMsy9pjWdYq5884j2futixrq2VZmyzLGuPRPtbZttWyrLvq5ivVj4EDB5KYmMjs2bMZN26c172kpCS2bNnC8OHD6dmzJ8HBwaxdu9ZPkYqIiIiISLGiAmgZB5bl70hqrSojc4XArbZt/25ZVjNgpWVZi5z3nrFt+0nPzpZl9QUmA/2AjsBiy7J6Om+/CIwGdgO/WZb1qW3b62safFVG0OrSWWedxW233cbSpUs5ePBgcfvcuXM5dOgQ8fHxAKSnpzN79mweffRRf4UqIiIiIiIAeenQuru/o/CJSkfmbNveZ9v27856BrAB6FTBIxOBObZt59m2/RewFTjW+bPVtu3ttm3nA3OcfRutyy+/nAceeIABAwZ4tc+ePZuFCxeSmJhIYmIiK1eu1Lo5ERERERF/s23I2A/NOvg7Ep+o1gYolmV1BY4GfnE2XW9Z1mrLsl63LKuVs60TsMvjsd3OtvLaG63Y2FhuvPFGr7bExER27NjhdSRBfHw8LVq04Jdffin5ChERERERqWu7V5rplXnpUJANzdr7OyKfqHIyZ1lWFPAhcLNt2+nAy0B3IAHYBzzli4Asy7rasqwVlmWtSE5O9sUrfS4zM7NU28iRI/n888/p2rUre/bswSoxB/f333/nuOOOq68QRUREREQEIGk9/G8UfPOgGZWDpjUyZ1lWMCaRe9e27Y8AbNtOsm27yLZtB/AqZholwB6gs8fjsc628tq92LY907btobZtD42Jianu9xEREREREXHLOmDKfX9Cxj5Tbyojc5YZYnoN2GDb9tMe7Z7p7DmAa7vGT4HJlmWFWpYVD/QAfgV+A3pYlhVvWVYIZpOUT33zNURERERERJyyUyH1L1O3bXf7F3eYMrJt/cdUB6qym+WJwKXAGsuyVjnb7gEusiwrAbCBROAaANu211mWNRdYj9kJc7pt20UAlmVdD3wFBAKv27a9zmffREREREREBOA/g8z6uBlpmHQFcDggZZOph7f0V2Q+VWkyZ9v2MqCsQxi+qOCZR4FS+/Dbtv1FRc+JiIiIiIjUWl66u+4amTu8w90W2rx+46kj1drNUkREREREpFFxJXNpzo31I2MgOMx/8fiQkjkRERERETlyFeZ6X1+33D9x1AElczVgWRaXXHJJ8XVhYSExMTFMmDABgKSkJCZMmMCgQYPo27cv48aNA8wZdOHh4SQkJBT/PPjgg8X1wMDA4vpzzz3nl+8mIiIiInJEyctw14MjIaK1/2LxsapsgCIlREZGsnbtWnJycggPD2fRokV06uQ+//z+++9n9OjR3HTTTQCsXr26+F737t1ZtWqV1/seeOABAKKiokrdExERERGRWvBcPxccBlZZ24E0ThqZq6Fx48axYMECAGbPns1FF11UfG/fvn3ExsYWXw8cOLDe4xMRERERESB9r7uefdB/cdSBRj0y9+Bn61i/N73yjtXQt2NzHjizX6X9Jk+ezEMPPcSECRNYvXo1l19+OT/88AMA06dPZ9KkSbzwwgucdtppXHbZZXTs2BGAbdu2kZCQAMCJJ57Iiy++6NP4RURERESatOxUd72oAP76DtoPhP2ry3+mkWrUyZw/DRw4kMTERGbPnl28Js5lzJgxbN++nYULF/Lll19y9NFHs3atOVO9rGmWIiIiIiJSS3mZ8K9O3m3PHW12sTzxJiVzDU1VRtDq0llnncVtt93G0qVLOXjQe8g2OjqaKVOmMGXKFCZMmMD333/PkCFD/BSpiIiIiMgRrqwplK7jCJp1rN9Y6kmjTub87fLLL6dly5YMGDCApUuXFrcvWbKE448/noiICDIyMti2bRtxcXH+C1RERERE5EgXGFz+vfCW8I914Ciqt3Dqg5K5WoiNjeXGG28s1b5y5Uquv/56goKCcDgcXHnllRxzzDEkJibWf5AiIiIiIk2B7Sj/XlgLaBFb/v1GyrJdJ6I3QEOHDrVXrFjh1bZhwwb69Onjp4gaDv06iIiIiIh4OLQD/lPOLvKXLYQuw+o3Hh+xLGulbdtDy7qnowlERERERKTxcxSWfy+8Zb2FUZ+UzImIiIiISONX0TTLZh3qL456pGROREREREQav/JG5mL6aGRORERERESkwSprp8qQKJi+vP5jqSdK5kREREREpPEra2QutFn9x1GPlMyJiIiIiEjjV97I3BFMyVwNBAYGkpCQQP/+/bngggvIzs72anf9JCYmsnTpUlq0aOHVvnjxYj9/AxERERGRI4ztTOaOGu1uC4n0Tyz1RIeG10B4eDirVq0C4OKLL+aVV17hlltu8Wp3SUxM5KSTTuLzzz+v/0BFRERERJoK1zTLYdNh6yJTb93df/HUA43M1dJJJ53E1q1b/R2GiIiIiEjTVpRvysBg6D7K1Dse7b946kHjHpn78i7Yv8a372w/AM74d5W6FhYW8uWXXzJ27FgAcnJySEhIACA+Pp758+cD8MMPPxS3A3z44Yd0735k/yuBiIiIiEi9ysswZWgzCAwx9VZd/RZOfWjcyZyfeCZtJ510EldccQVAmdMsXX00zVJEREREpA4VJ3PN4VCiqSuZa8CqOILma+UlbSIiIiIi4id5maYMiYIJz8CSRyGmt39jqmONO5kTEREREREB9wYogUHQ5QS4bIF/46kH2gClHrjWzLl+5s2b5++QRERERESOLK6jCaxA/8ZRjzQyVwOZmZlVbh85ciRpaWl1HZKIiIiISNPmOjQ8oOkkcxqZExERERGRxq8JjswpmRMRERERkcbP4TClRuZEREREREQaEY3MiYiIiIiINEKu3SwDmk6K03S+qYiIiIiIHLkcRU1qVA6UzImIiIiIyJHALoKAprVZv5K5ajp48GDxeXHt27enU6dOxdcPPvgg/fr1Y+DAgSQkJPDLL78A5niCFStWlPm+jz/+GMuy2LhxY31+DRERERGRI4ujqEltfgI6Z67aWrduzapVqwCYMWMGUVFR3Hbbbfz888/ccsst/P7774SGhpKSkkJ+fn6l75s9ezbDhw9n9uzZPPjgg3UcvYiIiIjIEcp2aJql1My+ffto06YNoaGhALRp04aOHTtW+ExmZibLli3jtddeY86cOfURpoiIiIjIkclR1KQ2P4FGPjL3+K+PszHVt9MTe0f35s5j76z2c6effjoPPfQQPXv25LTTTmPSpEmMGDGiwmc++eQTxo4dS8+ePWndujUrV65kyJAhNQ1dRERERKTpsrUBitRQVFQUK1euZObMmcTExDBp0iRmzZpV4TOzZ89m8uTJAEyePJnZs2fXQ6QiIiIiIo1IYT7MaAHLX6m4n9bMNS41GUGrS4GBgYwcOZKRI0cyYMAA3nzzTaZNm1Zm39TUVJYsWcKaNWuwLIuioiIsy+KJJ57Asqz6DVxEREREpCHKOQTvX2rqS/8Fx19bft/CPAgKq5+4GgiNzPnIpk2b2LJlS/H1qlWr6NKlS7n9582bx6WXXsqOHTtITExk165dxMfH88MPP9RHuCIiIiIiDd+vr0Ki8+/HgcEV9y3IguCIuo+pAWnUI3MNSWZmJjfccAOHDx8mKCiIo446ipkzZxbfHz9+PMHB5j/AYcOGkZKSwp13eo8snnfeecyePZuTTz65XmMXEREREWmYPGaste1bcdf8LAiJrNtwGhglc7UwY8aM4vqQIUP46aefyuy3dOnSKr3vxhtv9EFUIiIiIiJHoNBmFd/Pz25yyZymWYqIiIiISMOUk+quF1VyhrOmWYqIiIiIiDQQWcnQKh6i2laezOVnQ0jTSuY0MiciIiIiIg1TVjJExkBgCBQVVNy3Ca6ZUzInIiIiIiINU1aKM5kLruI0SyVzIiIiIiIi/peVDJFtIDBU0yzLoGROREREREQaHofDPTIXFAoFueX3LcwHR4GmWUrlEhMT6d+/v1fbjBkzePLJJ5k2bRqdOnUiLy8PgJSUFLp27VrpcyIiIiIi4iH3MNhFJpkLiYSC7PL7FmSZUtMspbYCAwN5/fXX/R2GiIiIiEjjlXPIlOGtTDKXn1l+33xnoqdpllJbN998M8888wyFhYX+DkVEREREpHHKyzBlaJQ5Py4/q/y+rlG7kKi6j6sBadTnzO1/7DHyNmz06TtD+/Sm/T331OodcXFxDB8+nLfffpszzzzT6962bdtISEgovt6/fz+33XZbrT5PREREROSI40reQiJNklaUb44nCAwuo69z1E6HhktlLMuqtP3uu+9m4sSJjB8/3qtP9+7dWbVqVfH1jBkz6iJEEREREZHG7deZpgyJck+fzM+C8Jal+zbRaZaNOpmr7QhaTbVu3ZpDhw55taWmphIfH1983aNHDxISEpg7d259hyciIiIidcVRBL++CkdfDKHN/B3NkW39x6aMaufepbIgu+xkLvEHUzaxaZZaM1cDUVFRdOjQgSVLlgAmkVu4cCHDhw/36nfvvfdqp0oRERGRI8nq92HhnfDT8/6OpOlo3tGdpJW3bs7h3Kuiw6D6iamBUDJXQ2+99RYPP/wwCQkJjBo1igceeIDu3bt79enXrx+DBw/2U4QiIiIi4nN7VprySD3P7PAuf0fgFj8COh8PAYHutXDlJXN5mRDSrOz1dEewSqdZWpbVGXgLaAfYwEzbtv9jWVY08D7QFUgELrRt+5BlFo79BxgHZAPTbNv+3fmuqcB9zlc/Ytv2m779OvWnb9++fPvtt6XaZ82a5XX90UcfFde7du3K2rVrve5rzZyIiIhII3Jggyk9k7mM/WYqYDn7KjQKBTnwaHtTv/ZHaN+/4v71oTAPgkJM3fXrXV4yl59hdr1sYqoyMlcI3Grbdl/geGC6ZVl9gbuAb2zb7gF847wGOAPo4fy5GngZwJn8PQAcBxwLPGBZVisffhcRERERkbqVvMmUBbmmPLgNnuoFPzTypTWbv3LXD+/0XxwuaXtg13KTZIL3mrmy5GU2ufVyUIVkzrbtfa6RNdu2M4ANQCdgIuAaWXsTONtZnwi8ZRvLgZaWZXUAxgCLbNtOtW37ELAIGOvLLyMiIiIiUmcK8yA7xVl3JhnZqaZc8og7wWuMgsPd9RWvwdoP/RcLwPalpszYb8rikblyDg7Pz9TIXGUsy+oKHA38ArSzbXuf89Z+zDRMMIme52Tb3c628tpLfsbVlmWtsCxrRXJycnXCExERERGpO0key2WSNztH6Wx3W25avYfkM5ZHWrB1Mcy73H+xgHvK6sQXTFm8Zk4jc56qnMxZlhUFfAjcbNt2uuc927ZtvP5Lrjnbtmfatj3Utu2hMTExvniliIiIiEjteY68rZkLr4/1nvZX3qhRY1DeWjR/sR2mbOU8+quy3SzzM5vkURFVSuYsywrGJHLv2rbt2tEjyTl9Emd5wNm+B+js8Xiss628dhERERGRhs9R4H2dk+qeBgiNO5krby2avziKTBkQaErXYeBf3g6bvy7dPy9DI3Nlce5O+Rqwwbbtpz1ufQpMddanAp94tP/NMo4H0pzTMb8CTrcsq5Vz45PTnW0iIiIiIg1fUUHptr1/uOsNbXSrOhpa7K6ROcuZzAWFue+9d0Hp/lozV64TgUuBUZZlrXL+jAP+DYy2LGsLcJrzGuALYDuwFXgVuA7Atu1U4GHgN+fPQ862RmfXrl3Ex8eTmmrCP3ToEPHx8WzevJmbb76Zo446ih49ejBx4kR2795d/JxlWVxyySXF14WFhcTExDBhwoR6/w4iIiIiUk1lJXNZKe56Q0qIHEUwewps/65q/V27Roa1NKUVALZPVlHVjF3kjgPMGrrAkNL9CvNgRgvIPqhplmWxbXuZbduWbdsDbdtOcP58Ydv2Qdu2T7Vtu4dt26e5EjPnLpbTbdvubtv2ANu2V3i863Xbto9y/rxRl1+sLnXu3Jm///3v3HWXOY3hrrvu4uqrr2bmzJlkZGSwadMmtmzZwtlnn825556L7fwfITIykrVr15KTY/5nWbRoEZ06ldoDRkREREQaoqL80m2e0yzzMuovloo4HLB5IWxaAG+dVbVnXNMsr/sZ+p1rRsYK/bg7pyuRdE2zBOh4dOn7szwGRUKUzEkV/eMf/2D58uU8++yzLFu2jOuuu4433niDZ555hsBA8x/dZZddRmhoKEuWLCl+bty4cSxYsACA2bNnc9FFF/klfhERERGpJkehKdv2c7ftWOauN5SRuU0LYM6U6j2z4ydo0Rmad4S4YabNn9/HUWJkDtxTLsGdaO7+1d3WBKdZBvk7gNr4Ye5mUnb5dqFpm85RnHRhz0r7BQcH88QTTzB27Fi+/vprduzYQVxcHM2bN/fqN3ToUNatW8epp54KwOTJk3nooYeYMGECq1ev5vLLL+eHH37w6XcQERERkTrgGpnrexYcWFf6fkNJ5lxJp0thPgSVMUXR5a/v4a/vYPRD5jqshSlzDkFkm7qJsTIlp1mC9/cqyCk9UqoNUKQ6vvzySzp06MDatWsr7+w0cOBAEhMTmT17NuPGjavD6ERERETEp1xTERMuhqFlnMOW30CmWbo2D3EpqCTJTFxmkqZjrjLXLWJNmbar/Gfqmus7eE6z9NxxsyAHUv/yfkYjc41LVUbQ6sqqVatYtGgRy5cvZ/jw4Vx44YXs3LmTjIwMmjVzz9dduXJlqQ1OzjrrLG677TaWLl3KwYMH6zt0EREREamOPb+b0aoDG8y6rOad4LQHYcXr5n50dzi8s+GMzJU88DsvE8Jble6Xc9iMbqVsgZZx7u3/W8aZ8vDOOg2zQmVNs/T89S3IcY/euTTBNXONOpnzF9u2+fvf/86zzz5LXFwct99+O3fccQdTp07llltu4ZVXXiEwMJC33nqL7OxsRo0a5fX85ZdfTsuWLRkwYABLly71z5cQERERkap59RRTdhoCHRMgIMB758TYoWY3xYaSzJV0YD207Fy6/eUTIN157PNRo93tzTpAQJB/k7mSRxNAiZG5bLPRi6fg8LqPq4HRNMsaePXVV4mLi2P0aPMf/XXXXceGDRuYOHEiYWFh9OzZkx49evDBBx8wf/58zFF9brGxsdx4443+CF1EREREamrPSugwyNQ9/353xv+Z5C6vgR4a/t6FsODW0u2uRA6gTQ93PTDIjD7WZzK36Uv4eLr7uqw1c57JcmFu6UPci/LqLr4GSiNzNXD11Vdz9dVXF18HBgby+++/AzBixAief/75Mp/LzCz9P/jIkSMZOXJkncQpIiIiIrX0xzve191GuuuXfAQtu0B4SwiJNAdXN1S//Q/GP+W+tm0IjnSvpyt5RlvLuPpL5g5ug9mTTb3vWdBzjHvUzXPNnNc0y2wo8tgQJaY3dD2p7mNtYDQyJyIiIiJSnk+me18fdZpH/VRoc5Sph0Q1rGmWR50Gk2eb6ZJlyTnkvTFKu/7e9yPbmKmj9WHuVHf9vQvhhWNg85fm2nNkDo9DzN+aaL6Dy/RfIDC4TsNsiJTMiYiIiIhUVYnlM8UiYyB9b/3GUpb8bMCC2GOh9ziIKOdogYPbvK/7ljhcPCTS+a56kJfufZ2yGfb+AVjev96Rbb37/fY/U7qOUmiClMyJiIiIiJQnyGNTjbJ2hHSJ6QXJG8wui/60bxVgu9f2RUSX3W/Dpx4XZSSonlMw65LDAYd3lH3Pc4olwMUfwPBb3Ne7lpvyxlV1Elpj0CiTOdu2K+90BGvq319ERESkThUVmoO0iwqhMAdG3AmXfwVTPyv/GVei99HV5fepD0seMWXsUFOGeyRzRc4NQxwO+Ok5CAyF27fBnSXOawNzTEF+lllbV5cWeCRnYx7zvhdQYtpkxwQYdn3pd5SXsDYBjS6ZCwsL4+DBg002obFtm4MHDxIWFubvUERERESOTN/9G948EzZ9Ya4j2kDc8dB+QPnPdHceX1DeNMz6UJALO3409Ujn9ErPg7TfdE6l/OVlU9oO06+sEceINuAohNzDdRYuAL+/6a53Ps77XrN2pfs3weMHKtLodrOMjY1l9+7dJCcn+zsUvwkLCyM2NtbfYYiIiIgcmfavNWXyJlNGtq78mTa9TOma3ljfUv+C9y8xdc/RqyCPAYCdP5nStbbvJI9RsZKad3D23Vfx9NLaan2UWSMHZjTxmu9hy9dmhLF5GX/fVTLnpdElc8HBwcTHx/s7DBERERE5Ev3wtHsnxewUU0aVMUJUkmt9V8mDrOvL80PcZ7PFDXO3B4W66yV3rBxxV/nvC21uypI7dDoc8Od7sHkhDJpiNlmpjah2JplzHSvQYRCkbDH1skY5/Tny2QA1ummWIiIiIiJ15psH3fVfXjFlTO/Kn7OcyVzGXncyUp9ciRy4p3yC93b9SWvhk+shO9WMegVUkAoER5hy5SzITXO3b/naHNew4TOYc1Ht4y7MhfYD4eJ57raWcabMOVz586Puq30MjZiSORERERGRikSWs72/J1ditOJ1eGFo3cZTkmtjEysA7t1vjhVwKbnNxB9vm/PZIiqZOhniTOZWvQOPd4XU7ZCZXPost9ruY1GQCy1iIdhjOmgz5xTPsOaVP9+ic+0+v5FTMiciIiIiArU/VqC8A7rryuav4ev74K/vzPWof5ZeUxZbRmKZneK9y2VZQjw2TrEd8NzR8ORRZlMUTw+2rHq8Gz6DVbO92wpzvNf1AbTsDGe9AOe9Vvk7Q6uQ8B3BGt2aORERERGROrHh89JtJ91a9eetQKCw0m4+894FpkxaZ8quw0v3GTINupwI3z0Oa51TGXf/Bn3Prvjd5W16UpuE17VBS4LH9MyC3LI3NRl8adXe2YQPDAeNzImIiIiIGOm7S7dFVGGKpUvJQ67rS36WibPzsaXvWRbE9IRzXoFzX3W3V3Y2W1jLstsLc015+qOVx7XwHrO+riTPhLCskbnq8Dx6oQlSMiciIiIiApCXaUbXTrnX3RZcjUTD8lMyd3gn9BxTcZ/AYIiMcV97rqsrs385E/hcm6EMvBD6nFn+mrWCHFj+IvzxjtlwxdOB9abc+g1kHzTTOGuqvqe2NjBK5kREREREwIxwhUTBiDug49GmrTrT+PIz3PU5F/s2topk7HPvAFkRzxGwwNDy+1XkyzsgKNwkhh2PhrRdkLTeff/bx2DWBNj+nbstcZn3O3avhD2/wzvnmuuDW6sXwwUeB437K4FuIJTMiYiIiIiAScZcI1aurflruiZr4+ew42ffxFUVVdnV0XOUMaiGyRyYg74ty5wzB7B9qSlt26zNS/wBZk9y9597KTiKzG6bAHt/N6OJLufOrN7ne47k+WtqawOhZE5EREREBJwjc85k7qRboVlHiOlT8/eVHJEC2LIYXjnJfZyAr8T0qrxPkMdGI4EhNf+s02aY0rVJimvaZGZS+c9sWeROwtJ2u3fFvG45NO9YzQA8jkOwmnY607S/vYiIiIiIS36We0ONo06FWzdAi06+/Yz518D+1easN19qW4Wk03OdXG1G5nqc5v2OP9425eFdpfue+oApDyU6GywzLXTbtyahdJ0pVx2eZ9tpZE5ERERERMjL9D5frbYsYNH9sPYjd5trJ0dfrvW65KPKNzQB750fqzIyd91yuPhDGDjZvd6uhcfaPMvy7p+X7n192gzoNtLUF95pyq7DzRq5Ve9A//MgvGXlcVSkia+Za9rbv4iIiIhI0/Xzi/DVPXDvfnPWWXZK1aYrVseP/zFlf+dmH4XOZK7k4dvV5ZqmOfIeM4pYFSHNPOpVSFrb9jE/PU6DrAOwbQlcubj8/gXZppzwDAy93NSzUrz7eK7tG3BB1eIuSSNzxZTMiYiIiEjT9P0TpsxKhsi2ZlOOHqf77v12WW3OdWN2Ue3e7ZqmWdl5cZ48jxuIiim/X1nOfsVsXNKsXdn33xgPsUNNPX6Euz2yxDl9nhvKtOxSvRjK0sRH5jTNUkRERESapsJ8U2YfhOQN5kDs2GN89/6Kzk+r7cjcoR2mrMoulmVpVs1NR5q1g15nlG7vdoopdyyDH5+FgGCIaO3dZ8y/3PWRd8FRo80Uy+j46sVQTCNzLhqZExEREZGmZ9evUJBl6lkHIc95GHabHr77jIpG3xxVGJkrKjCHfZfl0F+mjO5W/bgAWvlgVAyg83Gw/Vv39aBJpdfBDbsOeo8DLHPvknm1+0xbu1m6NO1vLyIiIiJN0+tj3PXDO2DJo6beqqvvPqPCkblKkrnDu+DhNvD722XfT90OWDVPyjwPEK+N46/1vi5v6mSrrr5LIDUyV0zJnIiIiIg0PR0GuesLboHUbaZelV0hy3P7drh1k/u6ooStsjVzKc73rP2w7PuHd5lt/Wt6xEDJnShrKryV2YTFpf95vnlvRbxG5pTMiYiIiIg0HcmbIC8DjjqtxI1aJjiRraFZe/d1Revidv1adrujyMTnyldKTiPMzzLr5fLSar+tv6+MvBPGPWnqNTk3rto0MueiZE5EREREmo68DHjxWHPWWcs473tV3eK/qlzHB4D3aBLAp9eX/cwn15v4sg6Y65IjaJ/eAP8ZCBs+g7Tdvou1to69CmakQUhE/X5uEx+Z0wYoIiIiItJ05Bx212P6uOtBYXDBm779rKJ8d70wFwKrMCXyz/dM6UrUSo7MeU67LHlId1VMW2COYGjMvM6Za9rpjEbmRERERKTpyHfuYBnWEoZe5m4fegWEVuEg7erwTObyMmDX8qo/m+kamatg5Gnw36ofU9fhkDCl+s81JK6plUdfAgFNO51p2qmsiIiIiDQtrmTunP96b/tf3hEANWEFmJ0sN33hbsvLgJ0lkrnCfAgKKfsdv73qfJfHNMu8DO8+vjzgvDHpdy7s+xNOvt3fkfhd005lRURERKRpyUk1ZVgL73Zf7e4I0NN5uHb2QXdbXnrprfk9j0cA+OmF0u/a9IV77V1uiWmVHRJqFWajFRQCY/8FEdH+jsTvlMyJiIiISNNxYL0pY3qZ8qbV0GkonHiz7z7jjMdLt+VluI8qCHZuErL3d/f9ogL4+t6y3/fba6YsyPZuj2xTuzil0dM0SxERERFpOpLWm+3zXaM6rbrAVd/49jMCy5g6mZvuTuYCQ0onZp6jeCUdSoSC3NIjc8HhtQpTGj8lcyIiIiLSdCRvhLZ9Ku9XG2Wtv8vzSOZyD5e+n5VS/vt+eRlyDnlvqCKCkjkRERERaSpsGw5ug87H1u3nBJdx1lrKZmhZYs1chMc0yewKkjmA1XNqH5cccbRmTkRERESahqxkyM+A6O51+zlBZZwn98tMcBSa+vinICjcewTPc2Qu/uTy333tj76JUY4ISuZERERE5MiVcwgO7zL1P942Zes6TuY8d8Y8/3VTFmSZ4wrAbK2fcJF7l0rwXjPXe0L5747pDWP+BZPf81280mhpmqWIiIiIHLmeHQR5aTD9V1jyiBmVixtWf58f4DH65kreAgLNJiieyVxWCmDB7dsgvBUsvBvsIu933bkDAoNg2HV1HrY0DhqZExEREZHG53+jzdTFihzcZhI5gFkTzMjY+CchNKru43PxnEqZ59yN0gqEgCBweI7MpZgdNiNbQ0CAOXjc04g7IbxlnYcrjYuSORERERFpXDKSYPev8OXtsH1p+f12/eKuZx0wZfuBdRpaKQHBMOQyU8857GwLMiNzhXlmUxYwI3ORMe7njr/W/TxAbB1v2iKNkpI5EREREWlc9qx019+aCNmppftkJsPHfy/dHtai7uIqS2AwdB1u6lsXmTIg0IwO2kVQmGvasg967245+mH450EY8xgM/lvFm6JIk6U1cyIiIiLSuKRs9r7O2O8+BNzlnXPKfrasM+DqUmAwhDYz9bwMj7bmpp6bbg7/zj4IbXq6n7Mssz7uuKvrN15pVDQyJyIiIiKNiyspcnGNbnnav8aUbfvBDb+bqY537ar72EoK8EjcspIh7gRTd40QutbRFeSUfT6dSAWUzImIiIhI45KfCYEeZ7n96rERSs4h+Oxm9/U135ujCM58FsKa11eE7rVuniNz4K57jsyBOYMuQJPmpHqUzImIiIhI45KbBpEe68v+nA0FztG5756AlW+Y+vHTzVRFfwgsL5lz7qTpSizfdJ4p5yj0X6zSaCmZExEREZHGJXkjtOnh3eba5t9R6G6r7/VxnlwjcwHB3iOCJUfmCrLNjpaZSfUbnxwRlMyJiIiISOOS+pc5/Hvq5+42zwO4XQJD6i+mkkKc698sC0I8RuZCSozMAaybb8qVs+olNDlyKJkTERERkcbBUQSJyyD3MLTqAs07uu8V5ZvSstxtQX5M5ob/w5Thrcz0SVdiWXJkDiBtd/3GJkeMSpM5y7JetyzrgGVZaz3aZliWtceyrFXOn3Ee9+62LGurZVmbLMsa49E+1tm21bKsu3z/VURERETkiPbtozBrvKlHdzNb+ru4krlwjyMK/Dkyd9w1cF+ye22fK76ykrmCnPqNTY4YVVllOQt4AXirRPsztm0/6dlgWVZfYDLQD+gILLYsy3VgxovAaGA38JtlWZ/atr2+FrGLiIiISFOy5Wt3vV0/CApzX7umWRbludv8mcxB2SODtm3KgABo1dXsylmQbdqswHoLTY4MlY7M2bb9PZBaxfdNBObYtp1n2/ZfwFbgWOfPVtu2t9u2nQ/McfYVEREREakaz+StZVcI8jiewJXMFTagZK4sOR5/rW7X32zSkp9prkMi/ROTNFq1WTN3vWVZq53TMFs52zoBnqcx7na2lddeimVZV1uWtcKyrBXJycm1CE9EREREjigHt7rrAQElRuac0xg9DxBviMnc8dPd9cBgE3eW8++8E57xT0zSaNU0mXsZ6A4kAPuAp3wVkG3bM23bHmrb9tCYmBhfvVZEREREGrOCHHMgeHAEnPeaaQsIhKMvNfXikTnPZM6PRxOUdNW3cNlCiGztbgsMMclc8mboeQYMON9/8UmjVKNkzrbtJNu2i2zbdgCvYqZRAuwBOnt0jXW2ldcuIiIiIlK53b+Z8txXvZOe/uea0lHGNEs8drb0t06Docsw77bAYMjPgoNboF1f/8QljVqNkjnLsjp4XJ4DuHa6/BSYbFlWqGVZ8UAP4FfgN6CHZVnxlmWFYDZJ+bTmYYuIiIhIk5Kx35QxvbzbXVMpy5pm2dAFhpgplo5CaNah8v4iJVS6m6VlWbOBkUAby7J2Aw8AIy3LSgBsIBG4BsC27XWWZc0F1gOFwHTbtouc77ke+AoIBF63bXudr7+MiIiIiByBslPho6tM3fNsOYAA51RKVzJX4JHMWQ1oZK4snmv60jVpTaqv0mTOtu2Lymh+rYL+jwKPltH+BfBFtaITERERkaYreRNEtIGf/uNuK7njo2td3P41ENXOPTIX0RraD6yfOGvKc03f0Cv8F4c0WlU5Z05EREREpP696NyWYchlpuw4uHQf1+jW4hnmByB+BExtBCt6PEfmmrX3XxzSaNXmaAIRERERkbrh2p0SYOUbppz0Tul+ZU2ltB11E5OvBXqckxegMRapPiVzIiIiItLwZKeWboss49gq11o5T3HDSrc1RJ7TLBv6+j5pkJTMiYiIiEjDk53ifR0UBkFlHALeIaF02/Cb6yIi32uIh5pLo6JkTkREREQanrQSuzuGNiu7n2VBr/Hu6+OuLb1JSkOlZE5qScmciIiIiDQ8O5Z5X4c2L79vRCt3PTy6buKpC57TLEVqQMmciIiIiDQ8O3/xvi5vZA4g3COZiz+5buKpCxqZk1pSMiciIiIiDU/2Qe/ripI5V1I08h7o0kg2PwElc1JrSuZEREREpOHJTfO+rmiaJY10J0hNs5RaUjInIiIiIg1PbhqceDMMvdxcR7apwkN2XUbke0GhlfcRqYCSORERERFpWApyoCgPwlqAFWjayjpjzqXH6absfmrdx+ZLzdr7OwJp5HTUvIiIiIg0LH+8Y8p9f5rz5QCi2pbfP+44mJFW/v2GqmUXf0cgjZxG5kRERESkYXEUmbLPmZB72NQrGplrrDx34RSpASVzIiIiItKwhESYMu54KMwz9eAI/8VTV6xGunGLNBiaZikiIiIiDUtBjimDI6D/ebD9W4ju5t+Y6spFc3REgdSYkjkRERERaVjys0wZHA6DL4Xe4yEi2r8x1ZVeZ/g7AmnENM1SRERERBqWrGQzKufa/ORITeREaknJnIiIiIg0LId3mp0etaZMpEKaZikiIiIiDcOhHfDfk80Olj3H+jsakQZPI3MiIiIi0jAc3Oo+ikDb9otUSsmciIiIiDQMeRnuer9z/BeHSCOhaZYiIiIi0jC4krmbVkOrLv6NRaQR0MiciIiIiDQMrmQurLl/4xBpJJTMiYiIiEjD4ErmQpr5Nw6RRkLJnIiIiIg0DNkHzflygVoJJFIVSuZEREREpGHY+TO0PsrfUYg0GkrmRERERMT/ctMhaS30OsPfkYg0GkrmRERERMT/dv8KtgPihvk7EpFGQ8mciIiIiPjf/jWm7DTEv3GINCJK5kRERETE/7JTIShMxxKIVIOSORERERHxv+yDENbS31GINCpK5kRERESk/qTvLbs9aS3E9KrfWEQaOSVzIiIiIlI/NnwOT/eBzV+Z6/1rYd3Hpp6xH1rG+S00kcZIJzKKiIiISP1Y9rQpUzZDzzEwcyQ4CuCrWMhMguad/BqeSGOjkTkRERERqR/p+0z580tmJM5R4Gzfbcr4k/0Tl0gjpWROREREROqebUPOIVPP2AtvTSzdp/Ox9RuTSCOnaZYiIiIiUvfyM6Ewx32dvNGUx1wFjkKIPwkCg/0Tm0gjpWROREREROpe5oHSbdf8AB0G1n8sIkcITbMUERERkbrnSuaGTHO3KZETqRUlcyIiIiJSd/Iy4ddX4Y2x5jruBFMGhvgvJpEjhKZZioiIiEjdmXcZbPnafR13vClH3u2feESOIErmRERERKTueCZyAUHQIhb+eRACAv0Xk8gRQsmciIiIiPieowgW3GrqJ98Bo+41bUriRHxGa+ZERERExPdWz4WVb5j6iTeZUomciE8pmRMRERER39vylbseGuW/OESOYErmRERERMT38rNNGaBVPSJ1RcmciIiIiPie7YAOg+C+Mg4LFxGfUDInIiIiIr5nF0FAsNbJidQhJXMiIiIi4nvauVKkzimZExEREZHS8jKgqKDmz9sOsPRXTZG6pP/DRERERKS0f8XCB9Nq/rztAEsjcyJ1ScmciIiIiHjLOWzKjZ/X/B2OIgjQXzVF6pL+DxMRERERb2vn1f4ddpFG5kTqmJI5EREREXFL3wcLbjX16O41f4/WzInUuUr/D7Ms63XLsg5YlrXWoy3asqxFlmVtcZatnO2WZVnPWZa11bKs1ZZlDfZ4Zqqz/xbLsqbWzdcRERERkVrZtsRdz0uv+Xu0m6VInavKP5fMAsaWaLsL+Ma27R7AN85rgDOAHs6fq4GXwSR/wAPAccCxwAOuBFBERERE6lF+FjzYCma0MDtWeioqgE1fmPqJN0FWChTmVe/9yZvgm4dMMqdpliJ1qtJkzrbt74HUEs0TgTed9TeBsz3a37KN5UBLy7I6AGOARbZtp9q2fQhYROkEUURERETq2h/vmCmQAMmb4em+8N4kc/39E2bTk4AgiOkD2HB4V9nvycuE9Z96t2XshxePhR+egsM7NDInUsdqOpG5nW3b+5z1/UA7Z70T4Pl//G5nW3ntpViWdbVlWSssy1qRnJxcw/BEREREpJQfn4Mv73BfL38J0vfA5oWQ+CN897hpv3getOpi6i8MgT2/l37X0n/B3Evhrx/MtW3DV/e47+elg2XVzfcQEcAHG6DYtm0Dtg9icb1vpm3bQ23bHhoTE+Or14qIiIjI1sWmHPw3U3ruWjlrnLve/RRoGee+fvUU2PGz+9rhgNw0U9+/2pQbPoO1H3p/nqZZitSpmiZzSc7pkzjLA872PUBnj36xzrby2kVERESkvhzYAAmXwHHXutv6nu3d55yZpmwRC8Oud7e/MdZMufz6n/BQK/jjbdO+cYEZlTu4xVxPeBbCo03dUVgX30JEnGqazH0KuHaknAp84tH+N+eulscDac7pmF8Bp1uW1cq58cnpzjYRERERqWu2DVsWQdYBaNvbe9Qt+6B337a93fUxj8Loh9zXq96Dn57z7r/jR1g3H9J2Q3grGHoZxZO2Du/w6dcQEW9VOZpgNvAz0MuyrN2WZV0B/BsYbVnWFuA05zXAF8B2YCvwKnAdgG3bqcDDwG/On4ecbSIiIiJSl2wbnukH755vrvufD6HN3Pej2sHYx93XzUtsa5Cx311f+pj3veP+bsrlL8OK1yG0ubk+9mpTnv5o7eMXkXIFVdbBtu2Lyrl1ahl9bWB6Oe95HXi9WtGJiIiISO389Z3Z5AQgMgaadzD1f6wzSdjJt0PmAXf/yDbez0e1Lf3OHqfDkGnQe7yZZrn7V9PezPnuEXfB0Zd4jwCKiM9VmsyJiIiISCNk2zBrAuxY5m7rNNRdbxFrplEChLUwa+n6nFn6PcOuh7Z9AQveu8C0dR9lEjmATkdD2k5o0xPOf820BQQokROpB0rmRERERI5E6Xu9EzmAk24pu69lwdkvln0vMBh6jjH102aY9XFHjXbf7zIc1n9ikrsWsbUOW0SqTsmciIiIyJEoaZ27ftH70Gts7d85/B/mx9OgSXBgnZl2KSL1SsmciIiIyJEoaa0ppy2ArsPr7nPCWsCZ/6m794tIuWp9aLiIiIiINBCOInf9wHpoHlu3iZyI+JVG5kRERESOBAvvgeUvwok3m+MFNnwO8Sf7OyoRqUNK5kRERESOBMudG5j8+Ky7reT6NhE5omiapYiIiEhjV1RYuq3fOdBlWP3HIiL1RsmciIiISGO37iNTDnCeA9f5eLhglt/CEZHqySnM4Y8DfwCwO2M3tyy9hbS8tEqf0zRLERERkcZuz+8QEARnv2I2POlzlr8jEpFqeHT5o3yy7RO+Ou8rHvvlMX7Y8wOtw1pz/dHXV/ickjkRERGRxm7vH9DxaAgM0nlvIo3Q1sNbAUjNTeVQ7iEA5myaw+Kdiyt8TtMsRURERBqL7UshfZ+pF+bDoUT44x3ISjY7WIpIoxQWFAaYZC6jIKO4PSUnpcLnNDInIiIi0hjs+xPemlj+/e6j6i8WEfGpsECTzE3/Znq1ntPInIiIiIgvJG+G/+sO3zxsrgvzwbZr/r6CHEjbDXtWmsPAv7ijdJ8Aj3+Xj+lV888SEb9yjcxVl0bmRERERGorfR+8eIyp//AkHHWqGUU79moY82jN3vnBNNi80NSHXQ+7lpsyLwO6jYRWXaDdAJg1HrqfAkdf6otvIiJ+oGRORERExF/+eMf7+u1zoSgffn6h5sncVo+ND35+AQJDYORdENrMu9+Vi2r2fhFpMFzTLAEGthnI6pTVAEQGR1b4nKZZioiIiNRW2i5T3p8KLeOgMMd9r7pTLfeshAMbIaTEX+JOvb90IiciR4QgjynT/xz2z+J6RFBEhc8pmRMRERGprcwkM+UxIBBOuNH7Xn5W1d/jKIJXR8FLx0FuGhzvsRnCUaN9E6uINDiFjsLieu/o3sX15JzkCp9TMiciIiJSG5u/MmvbCpxJ2+C/QVgL9/3CvKq/K/ugux7aHE6+DbCgVVdtcCJyBHMlc8+d8ly1nlMyJyIiIlIb6z8xZesepgwKhbt2wpnOv5QV5lbtPY4ieOtsUz/9EbjpT4iINu+68huwLJ+GLSINR4GjgLhmcZwSd4pX+7vj3q3wOSVzIiIiItW16zeYORIyksyB3SFRcM4r3n2Cw0350vEw/1ozQpe4DA7vKvudmQfgwDqIbAtDLzeJHEBYc4hsU2dfRUT8r8BRQHBAcPH1sA7DGNx2MANjBlb4nHazFBEREamuL241h3h/eTts+Rr6netOvlxcI3J56fDnbHNMwazxpu2efRASYTZHcY245aSactz/ld78RESOaAWOAq9NUGaePrNKzymZExERESlPXgbkZ8OyZ8B2mOmPX99nEjlwT7HsfGzpZ1vEel9v/9Zd3/CpeWfyRogfYUbfsg+Ze+ElkkIROeIVOgq9RuaqSsmciIiISHmeO9pMo3T59b9l9zvmqtJt3UeZzVB+f8tcb/3GfW/+Ne76X995PxfeqmaxikijVeAoIDiw+smc1syJiIiIuORlwp/vm+mPKVvdiVzPM7z7Tf/VXT/lXggs59/HB1zgru/4EZp1gD5nVRyDkjmRJqegyHuaZVVpZE5ERETEZf41sPFzyD0Me1e52896zpz7tugBOGqUOSbgjr+gKB+i2pX/vrhh0GGQe1pmx8HQpqep9zgdBk4ya+0ykuDjayE4App3rKtvJyINVE5hDjERMdV+TsmciIiICJjRuI2fm/qXd7jbb99mdpOMagsXveduL7nhSVkCg+Hyr+FRZ8IXd5x7c5PWR8GA8029MB8Kc6Dv2ebgcRFpUtLz0+nesnu1n1MyJyIiIk3PwW1mOmNoM5NwAfz1fdl9I1rX7rOCw9z1Nj2hy4lm1G/Y9e72oBBzHIGINDkO28Gh3EO0CG1R7WeVzImIiEjTsvkreO9CUx8yDU65D3b+BF84R+Ou+hZyDkFMb7CLfHNYd5uekLLZTKMMaw4TX6j9O0XkiLD98HayC7PpHd272s8qmRMREZEj39y/Qdu+MPQKdyIHsHKW+XEZeTd0Guz7z+85xpnMhfv+3SLSqP1+4HcABret/u89SuZERETkyFZUaM6Dc/2A2Z1y6GXeiR3A0ZfUTQynzoD4kWWfRyciTdofB/6gTXgbOjfrXO1ndTSBiIiIHNmyD7rrB9ab8qLZZrTsrOe9+5Y86NtXAoOgx2l1824RadQ2pm6kf+v+WDWY0q1kTkRERPxvx0/w/BCz/b+vZad4Xydc7F4HN/hvcPVS33+miEgFMvIzGPDmAOZumktaXhqtw2u20ZKmWYqIiEj9s23vjUW+exwOboXEH6H3ON99zu6V8OMzpj7qPug1HqLjvft0PNpshFJXo3IiIiUcyj0EwMzVM0nLS6N5aPMavUfJnIiIiNS9w7sgKBTmXAy7fzVtIc3g5NtMEuX6i0xOqm8/93+j3PW+Z0ObHmX3O/M/vv1cEZEKFDoKAUjJSaHILqJFSPWPJQAlcyIiIlIfnu1fui0/AxY/YOrNOpry8M66+fzgSHNIt4hIA5BblAtAkV0EUOOROa2ZExERkbq169fK+2TsNWXqdt99blGBux7azDfnxYmI+EBuYa7XdcfIjjV6j5I5ERERqVvvTfK+vjcJbloNnYaY68gYOP1R6DLct8lcVrK7PuZR371XRKQW/kr7ix3pO4qvR3cZzQkdT6jRuzTNUkREROqWc21IseAwaNUFkjeZ68nvmfPXUrfD2g9997lF+aac+BIMON937xURqYWzPj7L6/r0LqfX6FgC0MiciIiI1KXCPMhLh5je5rrHGPe99gNN2SHBlNHdIPcwZOw317YNv/0P8rOr/7nLX4adv5h6UGhNIhcR8Tnbtku1dW3Rtcbv08iciIiI1J2fXzTl0Ctg6OXm8GyXye+axC0oxFx3G2nKNR/ACTfAlkWw4FY4sBHGP1n1z9z1Gyy8y30dGFyrryAi4ivp+ele1/855T/0ju5d4/dpZE5ERETqRvo++OZBU2/V1TuRA4iIhnZ93dft+0NQGKybDzmHzW6X4L32rSrWzvO+Dgyp3vMiInVkf9Z+r+uEtgm1ep+SOREREakbe3835VkvQI/RVXumMBf2rITvn6j55+5bbTZVcdHInIg0EEnZScX1nq16Eh0WXav3KZkTERGRurHqPZNUDZpc/WMBslM9jhYovcakXLtXwN4/oM9Z0Gu8actNr/gZEZF64pnMPXziw7V+n5I5ERER8b3cNNi8EAZOqt7I2OVfmzLrAMy/xtTL2DCglL2rYEYL+N+pUJhjpmwmTDH3WnWpVugiInVlX+Y+AMbFj6Nv676V9K6cNkARERER38tMNkcSuHaqrKq440y5dbG7LS+j8ue+e9z7uvupJom7ayeEtaheDCIidSAlJ4UlO5fQrUU3Hj/58cofqAIlcyIiIuJ7BVmmDA6v/bsO7/C+zjkMv70Kx14NRYVwcAts+sJ9/4JZ7tE4JXIi0kCcMvcUn79TyZyIiIj4VmE+fHWvqdckmWveCdL3uK+zD4KjCAICzfWaD2DJI7DnD9i0wN1vwIXmCAMlcCLSwOQU5tTJe7VmTkRERHxrw6eQ+IOpB0dU//mRzjPiotrDmMfM+rvcNPd917RLz0QutAWc96oSORFpkFKyU+rkvRqZExEREd/ynBYZ3qr6zx99qdmJMrI1rJpt2nIPm3Pp3r0Atnxd+pmYXjUKVUSkPmQWZAIQ3yKe105/zWfv1ciciIiI1M72pbDZmWAVFcA3D5l6WAuI7lb991mWSeRc7wAzMmfb3oncuCeh9wRT7zS4RqGLiNSHLOc64nuPu5eYiJhKeledRuZERESkfIV5UJQPQeEQWMZfG3IOw1sTTf3q72DmCPe9u3bW/vM9k7nMA6be9SQY8yh0GAQDLoB+50CvcbX/LBGROuJK5iKDI336XiVzIiIiUrYDG+Cl402949EQ1Q5CouB85xQhRxH88oq7/4dXuuvTf/VNDKHNTPnVvdBpiKmfdItJ5ADCW8KA833zWSIidcQ1zVLJnIiIiNS9okJ3Igew9w93/cxnTZL1439g6b/c7Qe3mPKU+3y3hq15R1MmrTU/AG20Pk5EGhfXyFxUcJRP31urNXOWZSValrXGsqxVlmWtcLZFW5a1yLKsLc6ylbPdsizrOcuytlqWtdqyLE1uFxERaag8t9EeeoX3vbfPgdUfwDcPmuv2A8w0TIDj/g4jbvddHJFtoFkHGDjZ3eZK8EREGon0/HTA9yNzvtgA5RTbthNs2x7qvL4L+Ma27R7AN85rgDOAHs6fq4GXffDZIiIiUhcK80x5xhNwxuNwx18w6V3Ttvs3+Mg5pbJNL7j0E2jZ2Vy3iPV9LKHNYctXpn7uq2aDFBGRRmRv5l5ahLYgoibHtVSgLnaznAi86ay/CZzt0f6WbSwHWlqW1aEOPl9ERERqy5XMBYVAYLA5FiAiunS/S+aZnScj2pjr5nXwR3tIBOQcguBI6HOW798vIlJFO9N34rAd1X5u/tb5tI9o7/N4apvM2cDXlmWttCzramdbO9u29znr+4F2znonYJfHs7udbV4sy7rasqwVlmWtSE5OrmV4IiIiUiOFuaYMCnO3lXVmXMs4U7o2JAlt7vtYWnYxZbu+EBxWcV8RkTqyPW074+eP57U11TsnbsPBDRQ6Ctl0aJPPY6ptMjfctu3BmCmU0y3LOtnzpm3bNibhqzLbtmfatj3Utu2hMTG+O4NBREREqshRBHOmmHp+pru9mce/Kg+9HO7e7b4+7QGY8Cx0P9X38XQf5ft3iohU0+4M83veygMrq/VcXlFeXYQD1DKZs217j7M8AMwHjgWSXNMnnaXzUBj2AJ09Ho91tomIiEhDsvNnSN5o6p6jcZ71oVe4jw0ACA6HoZdBQB2s4Og20pRdTvD9u0VEqqjAUQBAsBVcrefyi/IBeH7U8z6Pqca/41qWFWlZVjNXHTgdWAt8Ckx1dpsKfOKsfwr8zbmr5fFAmsd0TBEREWkoXIncJR9Bv3PL7uOZyNW1Vl3g+pXmyAMRET/JLsgGICigeqe7ZRea52LCfT/rsDbnzLUD5ltmR6kg4D3bthdalvUbMNeyrCuAHcCFzv5fAOOArUA2cFktPltERETqyoJbTRk/ovTOkaHNIS/dHNZdn9ocVb+fJyJSwuG8w0D5ydz+rP18s/MbpvSeguXxe2eO86iX8OBwn8dU42TOtu3twKAy2g8CpSbMO9fPTa/p54mIiEg9sD2WugeW8deEiz8wh3eHtai/mEREGgBXMmdZFg7bQV5RHkEBQQQHmGmXt353K6uTVzOy80g6Rbn3eXSN6EUE+fZYAqjdyJyIiIg0ZGvmQUwvc6h3RQ5ugz9nw8h7YN8q03bWC2X3jTve/IiINDEzV88ETHL2xG9P8M6GdwA4q/tZ5BXlcSj3EGBG6LySOec0y/CgBjQyJyIiIg3ch1eY8r5kc9RAmMexAVsWu6cuPj/YlBs+h+QNpt5nQv3FKSLSiOQW5vLJtk+Krz/d9qnX/R3pOxjSbgi/J/3OpkObiqdZamROREREqu/9S2DLV6be+ig4uLXsfq5EDso+U05EpAmzsLCxyS3KrfDwtdkbZ3POUecwdaHZE3Jq36kEBwQTHFi9XTCrQsmciIjIkc6VyEH5idzFH8KPz0KLWGjbt17CEhFpLIocRdjODC4lJ4VCu7DMfhf3uZh3N7zLwLcGFrd9uu3TOpliCUrmREREjkyOIu/rLsOheUfYvwYGXggJF8NPz0FhHhx1GvRw/oiISCmpuanF9T2ZexgUM4g/k/8s1e+s7mfx7oZ3vdoO5R2ibXjbOolLyZyIiPifowgSfzCJRc8xUJgPVgB8dQ/0OB3a9DBnjUnVOQ+p5dQHYMg0CAwufTbcmEfrPSwRkcZo1AejvK53ZewiPCi8eD0cwD3H3UPf1n35+aKfGTZ7mFd/14HjvqZkTkRE/MPhgIAAU593Gax3LiZv0RnSdrn7/fpfU960WglddbiSuaBQiIj2bywiIkeIHq16sOXQFlJzU+nWohvb07YDsGbqmuI+kcGRxfWrBlxFUnYSJ8WeVCfxKJkTEZH6d2AD/PdkiD0WTrjBnciBdyLnKSdVyZyn9H1QmAPR3cq+n/ijKQN8v+BeRKQpyS3MBeC8Hucxvtt4Lv/qcgA6RHVge9r2UuvhPA8MH91lNH1a9ym+Ts5OpnV4awKsAJ/EpmRORETq3+q5ZuRoxzLzA3Dag9D5WMg8YBK3DZ9DtxGw6H5z3wos/30ZSRDVFjz+AD3iFObDb/+Dv76DzQvd7f88aJK6kCjz/Td8Du9f7L7fYVD9xyoicgRxnR83oM0AmoW4p6u3i2gHlH3kwOguo1m0YxG9o3sXtyVlJXHavNOY2ncqtx1zW3G7bdtsPbyV7i27VzvJUzInIiL1KzsVVr8PrbqaBC11Gwy7Hk640T3tEmDo5WYq5valsG2Je9qgS14GbP8OdvwIy1+Cc/8HAy+oz29Sf/athrfPhuyDpe893NqUoS0guivs81iQ364/xB1XHxGKiByxvt7xNQBRIVFeyVz3Ft0BuGbQNcVtWQVZRAZH8sTJT/Db/t94ePnD3Db0Nt7Z8A7/W/M/AN5c/yZvrn+T18e8zpB2Q7jz+ztZmLiQe467h4t6X1St2JTMiYhI3XE4IHkjZB2A+BHw5Z3uNXDTvoCuJ1b8fEAADP+HSeac01yKLX8ZvvXYwGPbkiM3mfv0enciF9UeTn/EHOr9aHt3n7w0dyI3/mlIWgcn3lT/sYqIHGGSs5MBaB7Vj7VZ7hkgR7c9mj8u/YOgAJNS3f/j/czfOh+AL8/9ktu+v420vDQ+2PxB8TOe6+wu/+pyerbqyeZDm2l7yOaL9x5h/8T9XDPwGtakrOHY9sd6Tdksi5I5ERGpO1u+htmTTD1+hJkiCBDZtvJEziUozJSzxptywrOQm+ZO5Mb+G9Z9bKZrFhVCoA/+aCvIhbmXwp6VcOr9ZjdIf9n7h0nSwlvB9N8gKsZ9b8IzsPwVuHwhLP0XtOwCCVO04YmIiA8dzjtM24i2XL85jT25ebh+F+7fpn9xsrUvc19xIgdwxkdnFNdjDtuc13cy4469mK7Nu5JRkMGu9F1MXjCZzYc2c2K3S/nbSz/R6o9NvJP8P07v/xppkXBRnykkpiVWGJuSORERqTuZSe66K5HrNhLOeqHq72gR6339+c2mDAiCc2dC//NM/Yvb4KOr4II3ahOx8ekNJhEFWPtR+clcYT4EhdT+8yqyeq4pr1vunciBmYo61CzEZ9wTdRuHiEgTtT9rPx0iO7C1oNAcm+PkSuSSs5O57vtHONzun9zecwjDIlK5/KvLuerLIkavMgeNh/b8jfhP7yNv61YKli6l1znn8ONFPzJv83w2ztpKqz82AXDJtw4u+RYWDLV405pdaWy+2UZFRESkLIV5prxqibvt1PuhZeeqv6N5x7Lb//aJSeQAjr7UlOs+gt9eq36cnvIyYY0zgYpqB47C0n2WPg4zWsAjMbCq8j9sSykqhPzsqvXNOQQt46BZ+8r7iogcgZLyCrht4y6Wpqb75fP3Ze0jLCSGPIft1f7pgcMUOYo48fNb+Tn8KgpCe/LYjgyGtBtK+8j2xYkcQN7mzby+bgsr7vknB558iq1Tp7HrpTcZ9FkSl30+r7jftk5xAIxfYdMxoy1Hd7u9wtg0MiciInVn7++mbNMLjrnKjHC171/991z7I2z+Ek66DQ5uNQlO52Pd94PDIOFiWPUuLLgFOh9nPmfe5SYZu/Ctst+bvg++/z+zDm3wpWZDlY+vNffOfsUkh5kH3P1Xvgk/vwApm91tH//dHGweHAYhkVQqcZmZMhrWAu5I9N70pSwFOVBi22sRkaYit8jBKb9tJLWgiEUH0/jzxBr8GVJDSVlJ/H7gd/Zn7Web1ZfA5jkEZy0rvn/1ukRTibnF/ZBtc9pvm3hr3EdkPTeezLQM7r/mHzz53L8Ydt5Z7m5btxKwdSuufTDzp17GNZ37kNipMw9s+ZORT/+bZ1/Yy299PuftCmJUMiciInVj7Ufwp3PUKiQSxj9Z83e17+9OAtv0KLvPqPtMMpa+G145EQZOhrUflv/OjP3wtHvLaJY+5n0/rDkEh0NeutnI5cA6+OxG9/2xj5ujAg5ugSecZ71NeAZ6jTOJWnCJBMxRBHP/Bhs/N9e5aWYEcNDkir97YZ45+FtEpInIKizCASxMSeOGDTsBCAuwSMovJLWgkOjgukthftzzI29veJuXTn2JMYuf5kDEWFo78skNbEto+ud0DMwkrYznBhbk8PRj9xC4fz8AP11wEQOxWDrkeNZ160lyy2hiDqdSFBDAFfc9zoQfvmH4nyvYFtuFoIcfYVqvrlyzJ4W7N+/mqY7dGel87zEb1pTxaW5K5kREpPaKCsyI03f/Bzt/gqmfudecte1XP+e/Ne8Ik96CV0eZ69VzKu6/b3XF9+OGwV8/mAPN3z7bfWD5FYud0x7bQY/R8Pxg9zOf/8P8APwzxexA6ZoembbLncj97RN4ayJ8/2QVkrkc9yYwIiJHuKlrtvNVivd0yqkdW3N++2jO/H0LvxzO5IyYlj7/XNu2WbJrCTd/ezMAT698mpSwYUxc+gk3fljI5+es57oHX8Bas5FnsjryXsuWxGV/xs6IM7miUzSXTBwLtnta5YAPZmMDuX2Ppk2LZlz4rxfplp/DT2OG8X5OHnf368PADtEcysrlms5tAegVYX6vz4yM4pSX3uPihR9z5adzK4zbsm27wg7+NHToUHvFihX+DkNEpOnJyzTnt0W1g++fgNEPQevu5fd/b5L3QdYuLeLgHxX/q6JP2Ta8d6F3Inl4B4x/ClofBbFD4c/3Yf41gPPPv1s2QFhLyEo2G6mEt4L8LLPZSG4a/DvO/f64E2DaAu+pkYV5cGA9pGwxG7C4DP4b/P4WnHSrWSf43RPw7SNwxhNw3NUwc6TZqbLrSXDpfNi9ApY9bXaj7HeOecfCu80ZenHDzI6VIiJHsFs37uTdfalebS/37ULPwL08vOIlloZexR2dwxgcup+RnUeWet62bV5b+xpnxJ9Bp6hOZX7Gwbx8/rPoBw51iec//eMJcP5j44JtC7hr2V3F/YoCWzFw33k88NorZb6n03/+Q3jCIPZENSfs2Wc49LaZDBl92WVsT8+k5YfmOIL/nTWJmx68mwP5hRwVEUrLSkYV/8zIpkVQIMcv34DlcLAhvhWtundbadv20LL6K5kTEZHS5l1eeoriGf8Hx13j3WbbsOsXePtcKMgCLIqTJID2A+DaZdS7xTOgdQ+TZP3ssXNm15Mg8Qfvvvcfqnjd2g9PwzcPmvrdeyA0quLPzk6F/4v3bgsKNyNsAPcdMNMmk9bByyeU/Y5xT5o1gI91MNf1nRSLiNQT27Y5kF/IU4n7eWuvOU/zuhZ/khXQjviWvflz6//x887v6ZgazNoB/yU/JITwtE/5bcx1tAlv4/WuZXuW8ffFfwfgs7M/I7ZZLLszdhMSGEL7yA48uug7Bv3fv+mxewcbunTn1nseJcdh80rfLryw4CnGL/6Isb/bpIfD7jbQd5d57xunBXDZYkeZ8YcPGULOypUAdHn3HSKGDGFXRhaZx5jc64bbZrDoigsrPS+upNUZ2XQND6V5UCCWZSmZExGRaniqD2TsLd3erIMZIWrV1awB+/BKs0kImIOsT7gBdv0Gr50GzWPhup/N2jN/WfsRzLusdPvIe8yW/pn7TcJZkYIc2L8WOh9T9c/dsxLeGFf6oHPXqJzL+k/MOjqXybNhzkWmHnss7P4VImPgvNeg24iqf76ISB3acmgLcc3jCA0svZ43Mz8TG5tmIc3IK8rjk62fAFDoKOTcHucSFBBMUEAgC5IPc/umXYQ4HGSnpZMeGUVkbg6vfPUSmetW8tmxAfzW06L7PvjXm0UALO+fwN3T7wQgZuelxDWLY8YJMzim/THMXD2T539/jjN/sfmpr8XBZhRP8XdYERyMfYX3772etofcI3/n/fsl/vXi/7GvTVtG/PFrmd/1g+EWH5wUyE9nf0vOq7OIvvxyDjz5FGkffeTVL+6tN4k81mzMlVZQyIvX30puaCgHr53Oi3271OrXW8mciEhjdijRJEa+OAy7MrZtpvp985A5jLv/eZC+F9r0hE+ug3XuA1HpONjsVjl4qplqOOpes5bMtk2S0mN01XZ3rEsOhzlMO2UzrP/YtPU5C8591ew+Wdee7GUSRoCTbzdJZMlRwL++hzfPhFs2QvMO8MUd8Ot/3fevWOS9c6eIiJ9k5mcyZ9u33L87jPi8Rfww/t8EOM9dyyvK45317/DamtfId+STV5Tn9WxRYCuyWk4hL/J4wsglZn8qbz14a/mf1b458/plMu0b7xGxiU/MpEVmOtmFDxPgyGJ4p+G8MOoFEt5OoHWazcsvFXn13xEDQY4IOh00x8Hs6dSKTnsOlfu5n5zQm9/jt3DaKgdfDA1gW0eTEK7+22qv0bWitDTytm1jx5SLaTlpEh0enOG+Z9t0WvonAPd068CNXdqV+3lVoWRORKSxys+Cxzqare8v/qD0/ZxDZgpfYDAEBJb9DtsufwOSxGXw9X2Qm24O885JNQlb//PgnP+a93r69AazDswlqp1Zc1beZzcU2alm6uVpMyAiuv4+9+eXTMJ75nMQElF5f5f9a+D1sTDgfBj/dMP/9RWRKivKzCJv4wYihpb5d3O/Wp+Zw7bsPJLyC3hv70Ee6tGJruGhdAoNZsbWvfy8eyFrirpjB7YEoM3OSzm7+0SahTTjnQ3vYGMR1uw4Igr+IjUvlbzwwfQMTqd5h8v4NrsDA7ZsZGf7jnRMOcCdbz5Pl6QD7GwDm2MtTvM4ky3q3LPJ/Ohjr9ja3n47B554gtTmLYhOT+Oyu68hC+9zRU/I7MDNz+8q9/uFDh1M15mvcvC7paT8wzuR/PGmEaQs/55ut8/i4ZVXABATHkNyTjIAa6aWPdU969dfCe/Xj4BI73+8fGTbXnbm5vNEz1ha1HL3TSVzIiKNzb7VZlfEPR6/B/79Z7NBx/ZvodMQk8i9e765N+giOOcVd+K27mP4YCp0GQ47lsGNqyA63kyB/Gup2bY/eaPZLMQusQ7g5NvhlHvLTgBt24zU7VlpErtrvjNTLkVEpEy2wwFFRVjBwRSmprLlhBMB6L54MSGxZW/SUd/25xXwTOJ+3nSuWauugMIDWI5cikLiyu1zxk/fcsfbM73a5l/Zi3ZjziQqOIq/dq+le3YUo1La0uriKWwalFDcL+6tN7ECA9lx8SVez195YxTpkWY6uyOgBQ+F3EjfBx4AICssnB8HDeX0X8w66Q233MHZF19IQGQkhSkpHHj6GVqcdSbhgweDbTNojsmVlk9ZTkZ+BgFWAG0j2jLgTTMVv7xkrj4omRMRqSu2DfmZsPkrU+9/HmQmmc0uortV/T0ZSbBpAQy5DLYvNVvhV9f0X+G/I6BdPzMa5JmkTZlrpkLOvbTsZzsfD1YAtO0DE56u/meLiDQRtm3jSEvDCgkhIMKMuNsOBxmLFxPUqhWFhw4R1KYNEYPNsSWJky8if9cuYm68ESs4mH333ANAcKdOxNx8My3OnFDm5xQcOED2zz9jRUQQGh9P5rJlRI0YQWh8fJn9q+P5HUmszczhmBaRzE86xLbsPA4XFhGZc5guO39gT5si8oNDyGk+rtSzl0b+xtjuk7h49fYqf94Hvy2hzeuvEhgdTeSwYWT/9hutr76a6EsuLveZ9IUL2XPzP2h54YV0eOhBCpIOsHWE99rh5FbR/PfhkTiwOZCYwAtPmkTO7tyZqy69jm2duxJcUMCQjWt45sqLiY8o+8zOgqICBr8zmBahLVg22XvTrqSsJA7nHaZXdK8qf9+qSM3K55q3V3DJ8V04vltr/krJ4vvNyVxzcnd+3p7CmH7ti6d1KpkTEakrv8yEL28v+965/4OBF5T/bHaq2c6/WXt427kVfVhLs+HFwS1mat6A82HJo7D8Re9nA0OhKM9sk39wm/dh1lXVvBMcfQkcfx2Et6z+8yIiTYCdn0/On39SsHcvOevWcfj9udh5Zj1YxDHHkL9rF4XOg6I9BURF0eXdd/hr4tle7VZoKOEDB5L9228A9F67BivIPQ0v/csv2fOPW8qNp/2MGbSaPKnSuHOLHGQ7HEQHB1HgsPn+UAYBQPvQYE75bVOp/hGH5/Lcfz6h+34HYeeeye/ThjF9j0kcQ7N+JiLtQwILD7DkgsW0jWjLuswcekSEklpQxIyte/jkwGHu7taByzq1occPaxgYFc77Cd35a88+ml8+jeDOnYn736tYwcGlPrsstsNB3pYthB51FFZgIHZhIRv7l96w6qwnXwXgn689zzEbVnOgVTSTHjN/Zl4dG8Od3dpzIK+w3EQOYGPqRi747AKeOPkJxsaPrVJ8NZWSmUdWXiFbkjK58q3y85ypw7pw9YjuXPzqcr67Y5SSORHxgz/egRadj8xd+LZ+A4sfMGubwEw1PJTo3Se6u5n+ePJtpacsFhXA80PMGWhluWCW+6wx2zYHTh/caj736EvMr2vqNugwyNz/36lm6uPwW+DQX9AqHk68Cfb9CW+d5X7vP9ZBi1izE6XWYYlIE1aUkUH6gi8I6dqViCGDsYKDyVz2I8nPPEOz004FwC5ykL5gAfl//VX8XOQJw8jdvIWilBT3yyyL5uPHk/7552V+VvPx40lfsACA6KlTaX3lFez+xz/IWbGS9g89SKsLLyzuu6F3HwDCExIIHzKY1NdeByC0d28cOdkUJqfQa+UKMhYvZu8dd9L6yiuImT7d+7vZNhf9uY3vD2Vyc5d2fJWSxoYs7911YwtWErZrH30Td7J0QDhR6d/w7pPuzUOs4GBWHj+QZyedyeSoHUzqN4XYZrFV+rVdsWY9LZd9T9GsWTjS0pzf+2+0u/vuKj1fni0nnUxhcjJp/QfSYu1qr3t5wcGEFhRw/r9e5GDLaDqEBvPHCf2q9N75W+Zz/0/389nZn9G1RdcK+25PziQ4MIDO0VVfB52RW8C6vencM38N25OzvO4dGx/N5qQMCgodjB/YgQ9W7qZkerbj8QlK5kSkjv36Kvw5By79CMJamA01/t3Z3Dv9URg2vfxNOBq65M3mDLXIGLNebNYEMyrmMvwWOO0BKMiFZc9AZBvY9CVs+8bcP+U+6DPBrHFr2wewYP61sPlLiD0GAoLNro8TnjYHSXc+Hia/W71fL9s20yjL2qFxyyKYM8VsVBLZpvR9EZEGKD8xkaK0NMIHDfLZ+xx5+YT16kn6wq/Yc/PNxfeCu8QR3q8/6V9+Sam/SQOBMW1ofvoYIoYOodmYMQBkfPUVEccdR2DLltgFBQSEhnJozvvkrFpFxLHHsu+eewgfOoSYG24k8rhjKThwgPytW4k4/nisgABs22b7hDMJiokhYuhQCnbtpPm4cey65loijj+eLrPeAMx0y5QXXiTmxhtIX/gVSY88Qtd580g8//zi+AJat6YwOBgr0OLH+/7JOxFt2JTtTswCiwp546Hb6XxgP7fedC/HrP+TkSu/oH2qezp+UNcuFCbuoM11fyflpZdL/RqEDxpE3BuvF08tLU/Kq6+S/JT3dP3AVq3o8t67tZ4imrthA3nbt7OoY1f6XXR+qfuFzZox+v/MurxX+nbh7HatqvTef//6bz7a8hHLpywv3p2zpLTsAp5etIk3fzb/CPvh34eRllPA8KNiCAkq+xmHw+aYRxdzMCu/zPthwQH8+cDphAa5/3E1r7CItOwCjn3sm+I2JXMiUvdmtDBlpyFmeuDqOfDT8+77l86H7qP8E1vmAfj2URg0Bdr2NslmebJTzSHYXU4w/Q7vgrcmmlGwks57zayRKyvpyjwAK1432+J76j0B2vWH7x6H0x+GYdd7P1+QA0FhjTfxFRGpJUdWFnvvuouMRYsB6Pr+nGoldI7sbBx5eeRv305gq2iCYzux45JLyV3tPZITFBNDq79dSsaXC8ldvx6AlhdeSEjXrmR89RWtr70GHA4iTziBgPBwr2f/SvuL5/94nlM6n8KZ3c+sMJ7tadtpHdaaFqGl/+xJ+r8nSH39da82KzycLu+8TXi/0qNKrnVkLruPHkzsH7979Xl14iQ+Onkw5y1+g44pexn3W3qF8RV/bnAw4UOH0OmJJ3Dk5pH922+kffRR8XRQgGZnjKXdbbcR1LEjuX/+Se6WLUSdfDLB7czW+wVJSWwdMRIwCXCXWbMIjo0lILT8KY41kV3kYEcZvz7WlVfR+7Zb2JGTR1xYSJUP6r7hmxvYm7WXD8/60Ks9K6+Qr9fv5/vNKSxen0RGXmGZzy++5WSOatuMH7emsDkpg49X7eXZSQksXp/Eo19sKO734d+HMaRLNA6HzQ9bU+jQIoye7ZqVet/uQ9kMf/xbABI6t+ST64crmRORWti00CQ4x/8dotp633M44HAiPHe0d3tIMzMKFBBopgeOexKOvareQvby4ZWwxmNb/26nwMXz3Oe22Tbs+AnenODeNCS0BZxyD3x1D9geZ9bEHgsJU2BoGQdRl+XLu+CX0v/CSfdRJsEVEREvaZ9+yt477iQgMhJHVhbNRo8m9vnnsG2bgj17Sfv4Y1pfeQUBYWE4cnKKEy1Hfj5WQAD7Zswgbd6HZb47pFs38rdvJ2rECDr86zGCos1RJVnLfyGwVSvCevWsMLaM/Ax+3f8r//fr/7E3ay8AY7qOI9+KYldeAc8ddxWdm3fGtm0sy2L74e1M/GQiALcOuZWp/aayJmUNC7YvYFLvSXTYkUnihe71b4Ft2hD/4YcEt/P+s7bItkktKGTlwXS6nDIcgO8GD2XGVbcSk3qQfn9tZk18Ae898F9CCh0kDmpH1z+TvN4RMPpk/hzTnXYPv0HbNDjqu+8IimkDtk1hUhIBzVsQGFX6bFDbtilMTuavs8+hKDW11H2ArvPmEd6/HxlLvmX3ddfR7u67iJ46tcJfy9pyTUf1FPvKyzQbObLa75r0+SSiw6J5+bSX2Xogkzm/7mT17jT2peewKzUHgF7tmtE8PIjfEt1n1A3o1II1e9JoGRFMZm4hhQ7vvKpr6wgKimw+v+FEWkWWTmh/2X6Qya8up2vrSG47vRcn9WxDdl4R57/yE7sP5XDe4FieunCQNkARkWpK2QLvO7f/Td7obh9yGZz5rPt6x09m+3xXH9ch0i43/G7WZz1SIgGM7gbXLqu/A6X/Nxp2/2rWsHmOsPUYA1u+qto7BlwI571a/c/OToWXTzCjeFFtYdZ4s9ul66gAEZEmJvn5F8j/6y/CBw8mICyUiOOHERARTsbXi9g/YwYAwbGxdP9qITsvv4LsX34hKCaGwuRkM2uhxN9do0aMIPaVl9k+brzX2rbQPn3I/+sv7NxcrIgIev32K1Zg1dcKFzocWNisSVlDdFg0b61/iw+3fEhuYAciIvsyvmMvZmYe4x3LwVcJz/q++DooIIhCR2FxeWKnE/lxz4/F928dcivn7IghIDKSiIQEAlq08BpNSi8s4sOkQzy4dQ+5zkQhND+PuP172dqpA1GH3yWh3RBu7Xk8x7XtxcY+fb3iaXHuuURPm0pwu3YEREZiBQVRWFRIoI3XpitVkf3HH+y4aIpXW+SIk8n67ntCe/QgqG1bsn40363bl1/4ZNdNoDgx3p+WS9tmoQQEmF+fPXfcSfqnnwKwffIlHDWwHz3PmVjl0TiX7zYnc/dv5xOS35fETd47i4YEWiTEteK8wZ0IDQrk5vdXFd9L/Pd4cguK6P3PhVX6nPOHxNK3Q3MWb0giLjqCH7aksOdwTrn937z8WEb0jAG0m6WIuNg2bF1sphCWl0jt+R3ePNNst19Sizj428cmGbMs99RKgPYD4dofYOdyeH0MdDkRLvvCfOaDLUu/a+rnEH+SL76Vtw2fQdwJENna3fbSCSZxmvwu5ByGx7uUfi6yLZz5H4hoDZ0Gw6YvYO7fYMAFENoMTroNWvjgPCBHERzeqURORJok27ZLJRwlWSEhdP9qIcEdOpRKIKzgYOyCgko/J/6TjwnrZbaSz9uyBSs0lJC48s9Ac0nOzeD97d8xLzmfjY5uRO+9lcDCAyZ2oF3cbayj9JTPe7u149HtZiSsRdK/CCxMIrDInNl2/6h5xEW24NrPz6DQLqQosDV5EUMIz/gai7LPLzuUe4jI4OYcv3wte/PN39VbcIiw/O1EZ8xnf75Nl8gYFk6c5fVc2iefsPfOuwDoueI3AqOiKv3O1ZG+cCFWSAjhCQnFo5oHnnmWg//9b3GfqBEjiH3+OayQkErft3LHIeat3E1eYRHHd2vNgE4t+HbTARwOmw37MthzOIdVuw7TLSaS7clZXDAklicuML/+RenpbD72OABSb7mNE6++okrfYfehbKa98RNBoel8ed05xN/9GVG97yM/ZRT5KaOL+517dCc++mNPqecvOjaO2b/uBOCyE7vy7i87yS90rz2MaRZKckZeqefK89XNJ9M6KoShjywubhvRM4ZZlx1TpaMJanccuYg0DrlpMO8K2LrIXEe1gzMeNwlXQBBEmN+QcTjgk+tNwnHVt/DNg9BzLPQ9G1a+YdZ5PT8Yotq7R+haxsHoh+Eos/MXccebUbdI869JXmu/bl4La+bCNw/B3j/MTowpm80asrI27nBxOMx7KvvXtvWfmAQM4PKvIc78Jk9BFgQ7F2yHt4T7U81mJC8eZ77733+CwBJbJfedCDPSKv68mggIVCInIke83I0bSX7mWTJ//JGAyEgCmzWjYPfu4vvNRo8mOK4zAeERWIEBZP34E6E9e9DmuusIbNmyeNQoPCGB0F69yNu0iV6r/yQgJATb4cAKCMCRlUVhcjLbxp4BQEBEBLEvvURIfNfiNVwAoT16lIrvP4lJ7MzNI6hgF9+mHGBA0ff0bzOA51M6kR3o3rExo+3thOZvITP8BLACSQG6hIVwqLCQdiHB/F+vzhzTPJKgAIvEgyt5Ny2WtHbuHRtvanuIG7bmADncesx/2JX0FXNtc2RNTPP+kOqebr89bTtvr3+b97d/T3bzs8iNPAmsAMLTFxCR/jkBjkyCA0Pp2W4IgYe3ce+Q0slLi4kTCYqJIbB1G58ncgDNx5pt+w9m5hHtHDFrfdVVBLVrS2DzFjQfP67CkbHdh7LZlpzFpv3pvL4skf3pZofNVhHBfPR76cTJJbZVBNuTs/hg5W6mndiVfh1bENi8OfmhYYTk5RLQooK18B4Wr0/iyrdWENphHiFRKxjwxr+I6lWIZdnYhc29+pZM5AZ0asFj5wygW0xkcTL3xo+JXn26xUSy6B8jWLsnjYkvmlHKE4/6f/beO96O5Kzz/lZVp5PPuVlXutJVnpEm52DPOCdsY+OAYUk2BmwW2EB+FxZYWGzWJBPXhF3AGHAA2+Ocx+PxjD1ZmhmNcro5nnw6V71/9NW9uiNpgm0We1c/fY7uOd3V1VXV1d3PU8/z/J5+3nb7dv7u3lNcsbHC2563nVNLXR461eA1V29cJU+57/97IUIImn7EtoHiM7YwXrTMXcRFfLsiTSBswSP/ALtfDv3bs+3LJ+DElzOL0TN1U/yHN2XMiRfCD/wzhG344I9kv7/7z+DqJyXybJyGPzw3vwu/Mg/W0wQ2v2sH7HgxvHYlduxdO6E7v77Mmz+VWQzPRhLBX78ImpPQW8ri7vq2ZQrgTW/PyhgDaZS5Lv7P52SK6xlc/kYoj8JX/xCufyt81+89dTsv4iIu4iIu4mmRttv4+/eD1iRLSxSuvx5740b8/fuJZ2eRhQITP/rW1fLenj0I28bftw+Avje/mcGf/qmnZUUM05AwDSk75acs5+/bh6pUsEZGkN65C4PHegGfW1giDE7RSw0P92zuaj+11ehV/Q77u3AqWM9C+LrhGr+3ewxPnZ+9cORLjzxlvS/oK/HF5fa6bW9Ud9DxT/L1uUdpDf4nYm+95fLy5V/DlSnvuu1d7KztxJL/eraYf3loksm6TyVn86VD8wyVXF5/7Rh5R/Gpx2a499gSTT/m2EKXgaLDTz1/B9sGi1y9uYpnK+zzjIvWhv96x2N8+rE5FjvrLVYDRZe/e8sNXDJS4n1fP8UnHp3hZXtHeMneEe7YN82ppR7/+cW7GCy5LHcjrvnNz/H2523nF192CQDH3/wWwnvvZfgPfp++l7/8gv06udjleb975+rv0qW/dE6Zn9n1l7z5hht4z13Hefh0nSdm2vzqK/cw1pdjphHwoj1rCwRfOjTPJ/bP8NhUk4Ozbf757bewY7CI58hVZsr//IFHmG0G/O4brmS0mjvnfM8UzY9/guqrLrJZXsRFfHvCmOwjZWYN+/yvw9xjMPkARN014o1N12cWr1v/I/zpDZlikx+Af3/fendCyKxY9/9Vlsh68FLYdB08/N5s3888ktX7pd8Grwz7/vH87fqv9axNT8b+D8BXfm8tRm7DlfATd51b7unw1T+Cz/3qudtf/q5M6dIJHPwY5Prgva85fx0v+JWMin/2sfWK6ve9H3S8FvN3Bmdb6i7iIi7iIi7iKeE/+hjxxGmiqSl699+P7vWw+gfQnc5qXNTZsIaHSebWE25s+O//ncprX4M4z/vkTBzUF05/gZH8CHsH9hIkAZa0eGjuIeZ6c/zaPb9GalJ+/eZf57U7X8ujC49SdIp88sQnuXb4Boq5cbYW+3ClxJJrVoz37HsPHz/+cXJWjgeSnfSqbzjn/CJtsyX8AlcPXIIoXM2/LPjsyEn++NJtXF3JLFqLUcLXGh1ePlghNYbEQP4CStwZ/PGpOXqp5vUjNW79evau/KnNQ1xZyvNjj59cK3fpZv5maoEHWz4yWURba2ljxnMOv71zEwOOxUbXod/51itvqTacWOxycrFL04+ZbQX88RePEMT6aY8dKDosds5Ptf+fX7wLSwkem2qyfbDIX9x1nJyjaPRibtzax6Zanmu31CjnLF62dwTracZTa8Ov3fE47/3aKbZsfYC0u4PJ+SqQxazFc3PM/fffZsN/+w1Utbru2D/43GEen25y77ElulEmT+UdxVifw3TtP2T1R1Wk02BDbpzPvOGOZx1v961CcPgwqlrFGhhYd7+ER49y/JWvYs+hgxeVuYu4iG8LaJ0RcYxeneUh++hPQdSGgV2gXJh7kt/8phtg5pHM8gSZcuMvw44XZbFvAD/0Udj2vLVjvvQO+PI7zz33TT8JL3sSTb4x8MBfw71/lhGDPPdn4QW/+vTujGdi5b7/A7Drpc+09+vP+/evyxgyf/ZglsLgy79z4fLX/DA89LfZd2lnytr5cPsvZgyUkCl59/wR9O+EHS/IUiZcxEVcxEVcBAAmiohmZiDVNN7/ftJGg7TbyeLLlEV0/PhqWZHLYfw1ogZrdAO1730T1uAg8cw0rTs+Rjw/T/nlL0fYNo0PfIDyy1/Oxt8/vzfE44uP88Of/mHCs/J1vnT8pTw09xAL/sK6smWnTCtq8ZNX/iR//PiHSKwREmcrfumlGLVG6V5aeg+Ov59KboQFhojcPTjuKG17O1Z4jJutAwyWdzNU2MSnFlv86FDMa7fcxGA+Cwk4o1x+K3GiF/I304v86rZRLCn4taNTvGdigV/aOsJ/HB/J+n3/AfadpRhtz7l89aZzWRqfCSaWe3z58ALtIOHIXJsDMy3Kns0fvOkqumHCHY9MM1HvcfVYlf/11ZOcXu6tO37bYIFXXLaBH7hpC2GSUs07XPObnyNdIV75idu28YrLN3DFpgrTzYDf++whXn/NJj7/xDwffniSeu/87+bNfXl+5JZx3nzr+LMe4x/6wJ/ytdOHieu3Utz1mwC0n8hknC///PPY0r/moRQmKX9+5zE+/NAU2wYLfOnQwrkVyoDS7l8HwNKD/Pnz38tN49+CePhnibTVYuHdf0TumquJT59m4d1/tLrPu+IKBt7+Nrw9ezj6whdBklxU5i7iIv7NkIRw8m748v/IXCIXD0NzAna9/Pxuj7f8DNz6HzLL3Lbbwc7B9CPwF7evldn2PPjBj8CDfwMf/49r25/zn6G7kFnhtjwHfvgOePzD2Tlv+PFvbbLok1+Fx/4ZXvwbGTnINwJj1pTGsJNZCT/5c+vLDO2BV/5BZpWcfSwrP7wXjn0xY4nc90+w+2WZO6WdX0s1cBEXcREXcREkS0tEp08TWVDcNI6qVDj6d/+Tpb/9Gyoz7XPKO1u24GzfTjw9jbttK8Xbb8ca2UD+huvBGOLpGYRjYw8NnXPss1GGvvfj38uBpQOMl8dpRS2G88P0kh7NsEmqUzaWNvK2a/8L9/YG+NDsEgvd07i9++hVX7e+Ih0gdRdt9Z//RCt48OY9bPSenozj2aITJtx/cpnHJpuUPIsg0bz6ytGndKk72PXZnfdWx+qzi01+6NETXFH0+I/jI1xfKTDo2Bc8/nw4Ot/mNX96D50L5EC7EH7klnG2DRawVixBb7hu0zlukn6U4scpfYWnHr8gTrnr8AJfPDjPD908ztGFDk/MtHjT9WPrFK5ngvl2wKHZNg+eqvPXU9k1/+Pn/wU//aUfB6Bz5JcxSbaofOIdr+COfdP8432nuWX7AL//ucPn1HfDthJKOLz9RSW+PPUFPnAsY6a+5/vuoeR8gzLMN4nGRz7CzC/98rpt5Ve9it7Xvpaxtp6Fyuu+h42//dsXlbmLuIj/I+gtZ3nJCoNQP5mRizz+Lxcuf+PbMiISYyBogFc9v1UsCeGu383qvfHH17Yf+Rz84/eda6n612KK/NeGMVmcoN+A2nkYJy/iIi7iIv4fxgOzD7B/cT/N6ZOMPzzL9TN52p/+DP1vfxvV17wGWS6TzM+DECz+8R/TuvNORHxhAX9mS4l23Kb7y2/l+1/8s990+6Y6U/ixz47ajtVtiU740sSX+Iv9f8HB5YM40iHSET911U/xE1f+xLrjjTHs7/h8YGaZv59ZInxSzq4hW/CcWoURZfGykSo3VItorXnDQw/x1fbaYl5eSv7ysnG+vNzmZ7YMM3AeN8UgTlnuRtR7ETuGihyZ61DvRXzlyCL3n1ym7Nls6c/ziy+7hIJrESWajzwyxaHZNh+4fwJtzKrr3tnwbMnfvPkGbtq2pmB+fP80+yYa2Ery5lu38qdfOsp0w+cP33QVOVvxQKvHmOcw4j69Ejfd8PnkozO4lmShE/GpR2c4Mp+xT7/h2k08/5Ihbt0xQJRo+goOD56q87/uPsH+yQZ/+cPXMVrJcXC2TZxqbluhvf+3hDGG2VbAY1MtHp9u8rXjS3zt+FouuzOxbba0iVdknWDme4gbNwDwiss38MlHZ85Tc0p+/M+4bexmvrr4oXP2fvJ7PslYaexb36FniPo/vZ/ZX/918tdfT+HWW+l/648iLAuTJDQ/egfNj36U3n33AbB73yMoz7uozF3E/8NI44wu/19buUkT+Ph/gIf//tx9u14G1/9YprBtuBL+7OaMwOQMIcg3iySCL/0WnLoXvuc9GUnIRVzERVzEtzFiHfPQ3ENcMXgFOesbJwf4ViNOY060TjDVniLSEQO5ARKdcLRxlG7cpepWuXroanbWzmVIfKbQvk/jQ/8MStK7736S2VmE5+GMbUJ3ewjPQ1UriHyezte/TmPiKF/bDdsPNEgUDDShfOH0VKu4f6fga7sF1R7ctFhj/PEl7nvDHp771l9lR3UHqljkhR98Id24y7XD13LL6C189/bvpuissSDeP3s/cRpz1dBV3DV5FwW7wNVDV7N/cT8Hlg5w99Td2NJmoj3BVCdj//tP1/4nGkGD0+3TPDz/MEvBMiDo9wYYGf135NwR3nnF84mx+PxSiw2Ozeacw99PLvK/ZjI6/0I3JTfZJfITWldljMvbH2owtdDNvg8WMMDxhS7bBgp89KdupeTZK9dQc2qpx46hrB9TDZ+7jyyQcyw6QcKjU81VNsInw5KCXcMlDs+1SbRhoOhSdBUzzYAw0UgBrqV4xeUbKLqKzf0FXnTpEJ99fI5NtRxvf99D6+rbs6HMgZnWBa/Ryy8b4c/+3TXntWoaY7hj3zT3Hltisu7z6FSTpn9+V8ZXXznKH33f1Rc8z781wiDiZN3n4Nf201tYIr93D3dN9fjn8zBYbu7L8wM3bea+E8t8nbesbn/F1lfw2eP3EPoVgpnvQUfD5xwrBfzXNyoO1B/gUxPvP2f/LaO38MLNL+SNu9/4re3gM4D2fervfz/BgQO07vgYALsffmg16f3ZMMbQ+tjHKN5+OyrLPXhRmbuIb2NMPQSVMSietUJ0tgveNwq/AXe9C+79k7Vtv7p4LgX9twKzj8J7vydjaNx4LYzdBKfvyZgnv+cvsxi3swPAo17Wjn+NtlzERVzERXyb4MxKej2oM5gb5ETzBH/yyJ+wHCzz8PzDaJORLXzv7u+l5JSQQnLl4JU8Z+NzkOKpiRHOh0V/EUc5T8t+eDaMMSwHy6QmpepWef3HXs+J5omnPW4wN8ifvejPuKTvkmd0Hu37tD7zGUwUMftff+2c/Ut9Nv3LMctVha0lpVY2dh0PisH6svbVV/IXu6f44sY6oSPYMmf4rvs1UsOB7TaDdo2ZPUOM7byGH7/ix+nzMmVIa418EhnJoeVDvOUzb6EVZQpHyS5x29ht7KjuYKG3wD8c/Ien7JdBULILbKtuYz4IOJkOEnu7waTYdo2evZ1UVZ/RGAHIWR/7UJOihss3Vfja8WUMgISqa7N1oMAjE43zHnvdlhqnlnvPOMfX91y9keddMsTvfOogUw2fn3zedn78tm1U8w7GGD704CQf3z9DJWcjRFb/992w+SlJO17/5/fwwKn6um237Rrke68b455ji3zlyCK1gsPN2/r5n18+BsArr9jAn3z/NQA8dLrOnYcW+PLhBfY9qZ+37xrk0g1ldg0XGSi6jPcX2Nz/1IygTwUTRZg0XZVP/Icewn/sMXSrRfG221h+3z/g7thB9XXfg71hwzOuV2uDlIKPPjLF6aUeS0tNPvbVQyzlqueU3Vmf4Lpghu2NKUI/YHxjP3t7czjbtlF6w+u45dEfAcA1Fp+69e/4mYPv4LHlRzFa0Tn8G2DWW13f8yPj/NzX37Ru29VDV/OeF7/n32zRqPfQw3TvvYfFP16TR2WxyMDb307/j75lXVkTa5JGgD24dl11mKA8+6IydxHfRjAGlo9DcSizYn16hR72te+BwUsyYoyom7kTXvrdsOkZEFf4jYyS3s7Dox/M2BbPEGacDSsHP/FlyNWy83+z0Bre+91w4q6szuf+HNzyU998vRdxERdxEWchTEOMMXjWGu26n/gs9Bbo8/r4+uzXaQQNal4NYwxbq1vZWt76b8LM9vD8w7z3wHvpJT2+OnUu6yHAWGmMme4MiV7vAiiFXFXwtlW2cdnAZVw5eCW7+3ZzWf9lHFw+yEPzD/GxYx/jsoHL0EazHCwz15tjrjvHUpBZda4avIot5S3UvBp+4jNSGOHa4Wu5cvBKjDF8Zeor3DV5F5PtSfYv7qcbZ9YelRrKPXjFVd/LSys3wcQ0jaSDY7sM1TYxUh1jLqnzW6f+ggcXHwZgV20Xe2qXIqKY470JXrD1RdTcGpUHjtB54H6c597Cc57/Q5x++SsRy43Vvh6/rJ8P76xzeKNg2/ZrcS2Pw3MHWEwbXNp3Kbe2RkjTmAdqDXb17+aXr/55xFKDtNEgd9leYh2zf2E/2mj29O+hHbXJWTlsaZO3n52Af6R+hIfnH0YIwV/u/0tmumtua/1eP6/c9koc5dAMm3zg8AdQQvGjV7ydT4dX8GAvhyXAlZJuml07RYpGYQGVQOP2NGGSslSQiEYMCvRIHtGKKE70KLiKgYLLSN7hRy8d5badg0SJJueoVTp6gDt+6lau2FRlYoW4Y0PFY64dcus7v3hOn4quxcZqjm6UsGu4xE3b+tjSX6DgWDwx0+L7b9xMwc0UgTjV7JtocO2W2jd9zwRxSqoNUgg+8sgUWwcK61wuz4bWhjf/zf18+fACP3jTFt77tVOr+xxLsrW/wKuvGuUHbtyCUoKi+8zjwoPDh5n++V8gd9VVFJ93O+6OHSQLi7g7dyBdl6W//msW3v1HzOT7uG9kD1v9ReatAscro3TsPE23wH0jexBG86LTD3BgaAd2qcgW3UVFAacixdjSJPVN29gnquQdhZICP0qRUmCMIU7XdIxtzSled+TL7Hnty/DGt3D6gf1cuniKgYpHdGISHeXQHVB9mnhyGUyHqfgkP/M2xdY5wf/40CBEXX7sJ0Mabvbc6J16K2kvc+m9fGOFv3vLDXzy9Ad5533rSeD++dX/zK7armc8dueDSVOEUvj799P8yEdwtm0nf/31OFvHkU+RHF1HEYeuWJ9kfuQ3foPKa19zznHRZJvlfzpEsujjbC3T96ZL6D0wR+tzpxj7ndsuKnMX8W2AsJOxMn7whzPl53zI1bJkzmejvBEufz3sfS1Ut6wluIZMMbzznednbwQoDMEP/gv0bYffftKq0g9/DNpzMPUAXPX90F3M8qWNP+f8daUJfOV34fGPZDnZqmOZUtqZA7sAb/vKWi64i7iIi7iIbwJPJpP4oU/9EEfrR9lc3oyf+ERpxGRn8ilqAEtYbK1u5VTzFHsH9jKUH6JgF+jz+ujGXa4bvo7nbHwOeTtPnMZY0kIIQS/u8ZmTn+FI4wjTnWkGcgOcbJ5Eo+nGXW4YuYG3X/l2DIaF3gIz3RkemHuAk82TGAyfO/W5de14y2VvIdYx907fi6c8fuWmX2HvwF600TTCBmESsm9xHzdvuJmcleNX7v4VPnXyKfJiPgmucjHGEOmIywcu59HFjBVYakPRh3YeDGClkFiCkl1C1Vvc/IThzZ/XzO7oQzgOdqtHea6D9Qyo2e3xcWav3sT9jf3seqLFcB0KK8agxzYLSr5hy3mI9L6+S3D3XsGBrTZdV7O1so2/f8Xfr3Nr/LdGrGMmeh3uWlpifyehzy0hheBoL+RUEHLKjxBAe0Vxc1ODmvFJBlxGpKLcTZl8ZAE/TsGAa0k2VXPEWjOx7PO6azaxbbBAUxresGeEnYPfPAHFvokG0w0fbTI3uxdcOrSa6+vbHZ99fJYff++D67b93huu5OWXj5D/BlIStL/4RSZ/8t/TtTw+tu0WJkrDvP7InSRCMlvoZ2trhg1Bg7/d9WLuG9nDqfLIeeuxMOQcRTt6+vvhQtjdmOAHDnya3WGPctRi64c/AVjEM116D88TnT6XhOds3FV6kHds+mt+/+TPcamfhY/8Yd97+MzwvrX+PvEOQHDnzz2P8YEC77zvnbzvifdx6+it/PQ1P02iE64cXK9MGWPofOlOrOEhcnv3PmUbmh/7ODO/9muQJHh79uA/8sg5ZcqvfhW17/1ecldcQeNDH6L1yU/hXnIJhZtvRijJxE+8DYAt7/07vCuuQLrrc/PqKCWe7VJ//yGSpQB7U5F4pgsryrAqO4z+l5suKnMX8W+Mz/5qRhN/Bv07M4KL6paMBKQzl+Uvm3oQXvfXWXzbPX+SxYE9Gdf8EHiVjKZ/3z9mbI0AG6/L2BwrY1mZsAXXvQXkygM9bMM7Nj2z9r71C5kS+b9ekiXL3nxLZiG854/PX/5nD0PpXN/ti7iIi7gIgFSnTHWmON0+zXRnmkV/kX0L+6gHdZaDZW4ZvYVHFh7BVS5hGrLoL/Ly8ZfjWi5fOPUFprvTANy68VYwkLfznG6dphN3uGnDTbxw8wsBqId1tNEcrR/lI8c+wnh5nFOtUzTCBp7yCNL1/npKKGpejUbQQEnFnv49PDyfWZzOEA6U7BK9pEfRKZK38uusNk9GwS7w/LHn84qtr2CsNMZ4ZfxZj9UZueSBuQeoB3VOt0/z/kPvp+SUuG3jbYwURthe3U7BLjDdmuT26nV0v3wXvf37UbZDcOoki7ftofqBLxIdPITxXLTRiDhmsh9yIQyeFcIkPA+TJJAk5G+6idzll5O2Wlj9fdhjm5E5D1ksobtdTBQRHj1K/X3vQ3c6Zw2kwnvurXQXprFOzWA6maXP+u1fonviGCfv/DjL2wd5xW/9LUOFIQQCbTRKKuZbAQNFFymfvUUoiFOCOOWJmTZ7N5Ype+e67p9ZGDDG4Ceae5sd7phe5rPLbYwxDKWCKNFQthl3HGajmENhxIWkw1KocTsJzV6M6cRYp7tsqHgMlz1OLHbxbMnukTK37RxgpOLx4j3D3zGK1bcSydISqlZbzRl2IbbPVBv+5ItHGSg5DBZdrt5cY7DknlPuQmgHMUudiJGKx5G5Do/+6m/yWD3mHy55ydMeu7ls87y9o+wcLhElmpu29TFS9rCtrM0l1+KOfdNMzDYoLs2xrWJx/PgML3z9i6n2ldDa4E6epPWxj9N4ZD/HD56k35NUTEradyX58ZtR+aeWu/LXDmMP57H6c+ggITrdwiQG6SredewP+Uz1Hj7m/g2VPcP4B5bo7J9nofEgb775fwPwz6/6KDtrW1fn+Hd9+LsYLY7yVy/5q3XnMXHM3O/8D6KJ04SHj5DMzIBts+mP3o23Zw/28DA6ilj8kz8lnpwkf9ON5C67jKmf/wWiY8dwdmzH9HyE41B66UuxBgcxYcj8u971tOOsan1s+/SnMaGi/uEjxDNdnI1FrL4cweFl0uZaaoriczdS/a5txLNd5v7wIayhHINvvQKr4l5U5i7i3xDGwG9U135vf2FmLTsftD43WXUSwt++Gia+dv5j9r4WXv+/n1mMXW8ZjIYTX4YPvSVTCqtbYHY/VDbD1tvgkRUCE6eU5YA7G8OXw2v/Z5a0e2AnPPC/M9r8HS98+nNfxEVcxP910EavxnYlOsGSFnEaM9ubZSQ/wqdOforHFh/jrsm7VskhzmCkMEKq09W8WtePXE+YhOxf3H/OeW4ZvYXfu/33zmvBMXFM7+GHcbdvJzh4kMJNNxEeOUL3q1+l/MpXkvaVsZWDNprFAw9jzS0T1gocXH6Cz8tD9D18kssf7zJ+7yn2bRWkAnb5ZSqBxNm+HbQmOn6c3A3Xo9ttHmw/wa+9ssOl/XvYXBrj1Sf6Gfj0A+QqfYz+8n8hPHSI9mc/h6rVqLzmNSTLS1i1GsLzsrixT3wC6eWofv/3oYoldK9LPDmJSRJ0q0Xhttsu6LaUtts0P/xhevc/gI5CwoOHzklUfTas0Q0Ub7sN6br09u0nPHgQsWkT7d1XoG96Dur6G3Bti+VuRF/B4bKNGd35mZifp4KJIuLpaeL5eXJXXkk9ht/97GF2Dxd5XjEi7nTov/IyenHKlw8v8NdfOcEP3LQFP045PNem4Fp8/fgSx1YIPd50/RhvvH6MgYKLZ0uiVGMriQCGyh6PTjb554cmeXy6xbGez1KaYgKNySkEBhLD91yxgT0DOarEfGRmmSNpykwxT2IpVGJI7bX3q2hEGE+Bp8BPILdmBZKzPqUZn2oCXs1ls7KZSmLmpzqMVDzGajn6iy6Xbijz5lvGvyFF9OxrCqBKJdJmEx2G6FYLWS5n21ot7OG1xVJjDKQGYUmMNohv4twXQlKvEx46RHj4CNHsLMFD+3Evu5T8VVciiwWWYhCVGqWBKvcsGx69+3F4/AE69Ta3Lh1ifOYoAAIo3PZc5u69Hy+J8AYHyF17DfW5ZZpTs+x61Ytxxscpv+pVCMchbTTofvUe0kYDZ8tmhFLEMzPIQhGUxH/kEU4dPs1cvkZiuxwIbf6ycH7L0mjV442Xj+JFmgfqXY4v93jRnmFsJfjTLx1jYzXHF372djx7TdE2qUb3EqLJNgiRufuNlXC3nBuDqnsx9Y8eI1n0kTkLWbRxt5TRQUL7SxOYSCNLDsKWFG8dhcQgPIUqO8ichXAUzuiFLdK/ds+v8S9H/oVdtV3886v/eXX75C99BYB3j7yPT9e+yl+/5K+5fuR6APYt7OMHP/WD/Ldb/huv3fla2p//PDKfx968hbl3voPO57+wWo+sbsGEbYyfMWc627cTHTt23rZUXvMaRt/5jvPu02HI3DvfiapU6H39Pry9e6m89jXoZpPTb/nR7Pgf/Et0+6n1rcortmIN5PB2VhH2uYsfFwlQLuLfFlEvc3F8wa/AJa+C8oZMifpGcPzOjPJ/aA/MPQ4jV8DGa74FZCl1cIoZIcnnfx3u/oNs+5v+Mau/PZuxYo5edZG05CL+n0SqU2Idr4vZOoOzFZoLYclf4v2H3k+iE5aDZeZ782g0Vw5eyXXD13Hd8HWkJiVKIxzlYMn/MzkDL9T2XtzDszxiHRMkAbGOOd06jatcpjpTLAfLnGie4AOHPoAQAle5dOIOOSuHn6ynGcxbeXb37eb5Y89nQ3EDW8tbGc4PU3ErCCE4sHSAPq+PkULm7pTqFCkk7bhN+4tfotQ3TOn6GxFCoH2f9he/SPMjH0WVy4RHjxIeOvS0/bQGBxGOQzx1LnPctxuE5+Fs2YKqVknm5ohOngQgf+ON9L7+9XVl3T2X4u7YQXzldfyltZ1T7YT84ccYcQwTuX7afcMsdEI8S3F8uk78NLkoX3v1Ro7Mtzk828FWgmreYbTqUfJsLCnoL7qcXOwy2eihNWhj2DFU5KZt/fzdvSeZa4UYKbJFTMAUbdJNeUSYQqSRnQRdssm7FsFUB9VnUwgSLL9DaisMgnItJcnbLFeq9PJ5nDhmsL5EdanB4kA/MxvO7xZ3PuT9HrtOn6DU62Jpw3Khyu4w5vawy+Uba3j9NaxSgQOBy6GDpyiFDeT4DvYMFNgyfYTg4YfwH3wIZ8tmBn7yJ8lfd15Z8hkhmpxCFQvISoXoxAnm3vlOrFqN5ic+CVqTu+ZqggNPYIIIa9P1yFwfsjSK6tuGCRrkbxwnmY9IGwaDi3QlJhJYAw7utj5KL9yMiVI690xjwhRvVw1rKI89nCd4Ypnevhm038bd2k/ptp2k7YDWZ+6m/dkPYY8MUHzB80mXlmnedx93Huxw987nc9AtsEe6tDDUdczGJGZBKh59FpbGl0zt4/OjV2BhuLazyK7FY/zt1ptX99888xj/4eDHGewvEx0/zmRxkIniEHdtvBJbJyzmKox0lzFCcLi2meOV0XX1j7XniaXktql97GjPsuWGF7FR7aASgWBFNpICazCHPZTPvl/eT+t4RjJjEo0q2ATHGsRTHS5kkvX29GOPZLGY2k8IDiyRNiOEpzCJhmT9gf0/cCne3v5nHYN438x9/Ohnf3T19xnF7Ay6+2ap/+MRlqwGP7jj/+NtO3+Ezx//DEf0DEPeAMu9Jf7i3TEbnvti2p/73Dn1j3/wg0STAe0v+5hoAYIv0PliFnNpb95M/pprqL7+dQjLIjx5EhNGFG59Hog89mgBE6WYSJN2Yqz+7H0onWw+GG2IZ7oIS2RjYxv8Aw06X8meu87WMsWbR7H6c9ijBdJ6CNqg+r2nHafvXGVux6B54LFj4D1zVqqL+FfC4tEsRsx6GtO/1lkcmVOAqJMpRb0lOPxp+K7fg+vf+n+mvd8Mwg7sfz9suRWGnhlL2UVcxHcK9i/s5/7Z+wnSgMHcILdtuo1EJzTDJmPlMRKdsOgvcufEnXx16qucap3CszzqQZ0gDbhx5EZuH7udklOi3+vnq9Nf5ePHPk6kIySSHbUd7O3fy8Hlg8x0Z9BGE+uYRX9xtQ2WtBjKDVFyShyuH8ZgsIRFYrKg9jPufdsr29lW3ca2yjY8y6MdtZloT9CKWnjKW3X3u3roaobyQxTtIv25fhzp0Agb9JIey8EyS/4SM90ZjtSPkLNyFOwC/bl+FnoLHGseYyg3xEhhhEQnxDqmG3c53T4/bfk6GOjz+vjuHd9NmIY8PP8wI4URclaObtxlvjfP6zd/N5V7F+nbOMY1L381yjpXmTDGkCwsEE9NISwLe8MGuvfcg7//Uep/v5bqRHgeJgjOOX4dlEIohYmi8+7WQNe1CS2FXGEN9m2Lif4qqRQ0czZbhE3H83i8WGJ8bpHI8Ti+YYREKgphyJu+/BUK4UqAmJTEhRzhju0MaEF04gSJkEy6OSaHRti0MMvBsW3snDrF1pm1GL/IsnGSmLlqH918ga6XY6law45jbjh+GLvbOW/7UYqBt70N+f0/xANffYQ41nzpRJNHjs4xXejn2pzPY4FFgZQrS00GFifI9To4aYIXB6i+jTR2XIooeFRHBpkpVRjopSRTc/z948tEyuUqf5arZYfjc00eGdjBqZGNbBgqokxE2E0IhaR/pIQsORwJQ1KVCWGmYIOztjAgV8b72aLU7bB1eoJKp0W13ebw+HYObd7KcH2JzY1ltrbqVNOEgpIMJDFxtYqSgj6dEiJpJIKuchjvK/OSoSKi16P9uc8RHj5MePRo9p5+NrBtiDNmTWfHdpL5BdAaWS7hjG6k8JxbQSqShYXV+els2YwxBqNBOnn8fQ/Q/vSnARC2jSiMYo8/F6EcVN8mZD6z2gq3hFAVOKOEqBDS9XJH2jid5XB1ikySsjFNsArr86UZDG0gDyhgAs3plasxi+EkKfeQkAJDCPJJRDXqkRjN/lyZ+pM8hLbmXeb8iJ4xVKXgBTmHiTAmlxouSzWjQnPL6AYWw5Q3Li89u/FdQSH26dpPzbY4jOAq2+G78jmigs1gZNi+GCHUPFZ/gbRTRvey3HfO1gq5vf2oko1/YBl/33mCOM+CcCSFm0aRjiTtxtgDOayRAu0vnCY83jynvKq49H3/JatWu7QZ0v7yJKrqUrxlFGE9ezbag8sHecPH3gDAztpO/uEV/3DeBcRkyWf2XQ/wY9t+g8FGysPDa++X59ev5T98oUZ05NOovu2YJEC3phD5PFs/9EE6Xwvx96+VF7bEHs1RuK6Iu3MzweNLdB+YAwEybyPzFsGRBsZPsDcUsli2J6Hv312CCVLqHz4K+vx61Yb/ciOq9I0nrv/OVeZGlXngl67MiCWcZ5c9/lkjCTNFxZjs82RXv7OxdCxTUm78CSiOrKfU/3aFTrN+nW9VcukYHPw4jN2YuQzC+tQA+z8I//JWGLkcrn0zjN2QsUbmatm4lUaysoc/Ax/8EYh752/D974PLn3lv0r3LuIi/m9CM2wSpRE1r0Yv6WXKSGeGSEdsLm3Gszw8y8MYwxPLTxAmIbayOVI/woK/wKnWKYp2EVe5eJbHXZN30Yk6hGlIpM8v5J8P4+VxtlW20Y7bbC5tphW1+NLpL60qXWfjuRufi5KKA4sHaEZNwjRktDDKtuo2clYORzm8ZMtLeO6m56KEWrWGNYIGnz75aU40T1B1q7iWy9H6UT55Ikvo2kt6zPfmV89jS5utla2cap1iU3ETx5rHsKR1DiviGUghqbk1lFAsBUtsr25HCUWQBhSsAjtrO2mEDTpxB1vaONLBVvZqMllXubRX3K0NhhuHbiA+PMPpT95Jr9Eg9n0K1RqW69JeXERKSRJHlAeHeNFb/z2f+pPfI27U6esE5KOY2uYtDGBRrvXRfeBB5MJTC1haSgJbIbRBaU1qWRzcfSkfveV5tIsVBuZnueaJxym85IXYU5NcPXma+dowB/IeUWuZg5u3UQkDTpZqnKwNEesUK16ZA0IQ2S5BrkA3l71jnShEGE3oXlio9MKALTOTHNm8jeH5SewkJlWKwfoSo8sNPnfjbcT2eg+GcrtOrGyUgYLfY65/8IIeFflel9fe+Rm2zkxx+dEnmOsbpNxtM58bodRXJZmbxIpDDu/ayYaleRaq/dx91XUkyuLh3XtJLAuhNeap3uMXwNap07zx859grn+Qey+7mkPjFya1klqjpcRNYjZ32myPfVCKjUmE7+ZwhGF0aoLdc9MsWw4ceJz7tmzn9ofu48jYOF+87mYumZ9h55Yxyv01NuiUehjxomuvoLJ5LBsfIdBC0NWG8rcg7iztdDC+jzGGtN4gePxxrIF+gicOYvX3YY1sIDh4AlXJ4e3eiT02hqpWCR47zOKf/ynJwizx7AyFG26ke/fdpM1MyBf5AWSuDzW0G5mrojtLqL5tqIFdCMvDGI0wy8iig4kMJlnvnaMqLsJTCEfSLFgsbS0xlZN8/tACn358lp2O5E1EPLShzCPLCY1eRF5oFhKJhcHTmkBInhf6HFGCGcslegpvAWFgp44oehaL0iWKU2a1RgJXK5sbhktcc/kwz7ttnNlmwFjfM2cH7c136Xx5kuVlnw+fWOTS0TIvfdkOevWQB2ebnKz7vP76MXoPzxE8tsTniXkna4s0O5E8B4vXOjlyOYt/MRHPTy2K3YRqwcbbWUP7CWkrs4qRmlUikdzlAzibSuQuH8DqW68EGWPAZEpXeKyBPVrEHimAMZgwUwBl/vyeRybWdL4+g6q4GD/B2VLCGsp/y9hy53vzHGsc4533vZPjzeP8wvW/wOt3vf4pUwlM/tJXeMfoX3NXZT15zF8d/XU2xk9iK1dQvHmUzt3Tq5tyVwysU+qeCsKzcLdViCbakGqc8QrJko/xE4wx6PZK7j9L4u2oYg/nSRoh0akWJtZUv3s7+Su+OV3hO1eZ29ZvHvihlRf0LT8N254Hta0ZY2BjAgqDYJ+rsWNMprwsHcmUjqABX/wtOPJZeNGvw03/HjqzmeLhVTPl4/S9MLQ3I80I2/DKP4DLvmetztY0TNwHhQH4m+9af75cLftbG8/ir7bdnhFv/FsiTeCJOzJFbWAnfPXdML2Sz23zzXD7L2aWs/kD8KlfgnBl1cUpZtulDTf8eBYz9tDfPfW5Rq6A6uZMIQQoDq9Z8J77s7DjxRnByYYr18hILuIi/i9BL+7xtZmvMdOdIWflKDklCnaBE80T3DByw2pi4VRnL0u1cg8kOuHdD72b6c407ahNN8ksOVW3yqnWqXNc9Z4pzpBc9Hl9LAdZLMA1Q9ewtbIVV7koqbis/zJu3HAj987cy+OLjzNWGqMe1pntzrK7tpuaV2Nv/97zkld04y6nWqfIW3nme/M4yuHKwSvXvdS10Sz0FhguPHNSoKUo4cFWl6kwppOkdFNNzVZ4QjBshQyJRWIdcuOGG4E1MgEdxwjLItIR3bjLQm+BpWCJol1kY3EjVbeKkipjL4s7lJwSJk2Jp6fRnQ6608FIhewfBAzhIw8RT02RLDfQxSpRkLB4+hQ6pxHG8ND8abpJTCmI2NDqkWpNohQIqHUDWnmPlmcjjcFOUnbPLOMmKU8WeXzH4eToGKmUjM3NkErJX7zmTfS3mmyemcQIuGfvZcz39WPHMcJoTo7tpF38Bl3UgVKnCbHOhGkEvpXDOApijUo0KkiJ8xZoQ00phgJDNSewXMN3bR3DFnB8ucmfxufm8Mp1OsSeS2LZbD19mG2nD1PsNBmoL7CzVuby217AiSce5/5jxxmoL7D1thfy1UOHSZWiXu6n1G2yYX6S0PH4+IveyOzQMySrWkE1DnFDn+GwR//xJ2h5BXYef4xit0WiLF74879Kr1SlMzdPuLjEaF+VfLNJs1HnUa14yC1wt7c+fmejJdnVbeF22jxvcYbhoEd3YIgg8Nk0OcHG2Sk4dIhkYQHhOBjfX1sMXrF+qVoNmcsRT0+Tu/Za8tddh7tjB/bGUayhocz91XJAZDFIJkzRQQoCrD4PYUuSBT8Ta7oxwRNLJPWQZKFHUg9wNpVQBRtZdnDHywglkSUHVXEgMcRzvcwFTgpIdRantLmEcBTClsSTHZIgJm4GhEsdkvuX0Z0YJKiql30XrAr7wrNQBSuLVXMUwo4IOjG9lk9Jr1d4VNXh0IjLVzodSASmGSGkIJKCqSRhaGcfXQyfemyWwZJL2bPpxQkTy2vPvr68TcOP1xk7BksuWwcKlFyLnKMIE83nDqyPm1RS8OorR3l0qsnxhQ4/88KdXLM5k9XG+wtU8jaV3HrFZW6py2A1hzxPDrkLkZd8s4gm2vgHlvjanSdwpGTPjn5K1w1jjxTW5RkzqUH34vNadow2BIeWUSUHZ9M3zwz6fxrvPfBe/vjhP1595/3Xm/8rb9j1hqc9bv4fHuO9U//I3wzdAcAvT/4obdXlNbmXr1rPIisktmIKwdq9bY/kGfixK1AFGxOnoCTLHzhEuhSgwxRVtBl4y2VZTKYxpI0QVXYR6vzX3ySaztdmUEWb3GUD35BF8pngO1eZu+4688D/eC3c9T8uXMjysqTMe16dKXB3/DQ88r6nrtgtZ0rbGUgLzreqWxnLLIJX/0DGYtg562Fx/Vuz2K2J+9bXdQaDl2SK4+6XP3VbvlUwBmYegbv/EI5+4VzijqeCV81cIJdPZBbH+Ekm5Gt/JMufduiTmZLWWYB9/wCjV2eU/1//nxD7sPtlcOX3wyWv+Nb16yIu4mlgjGG2O8tkZxJXudSDOolJuG74OipuZbWMwVwwrivRCV+b+RrLwTLTnWkO1w9Tckq0ozatqEUzbNIKWxgMZaeMq1zm/Xk6UYdOfAF3sBXsqO4gTEMm2hNAll/LGLNKKy8Q7O3fSyfuMF4Zpx7U6fP6uHb4WtpRO3NnzPVjCYvlYJmSUyLRCb2khzaasdIYlrSQQrK5tJlNpTUhOEojwjREJx6TjR6VnM1iJ+LYfIdenFnrh8seUgi6UcLWgQKb+/JU887quMVhiu2qb0iQMcZQT1JaScq+do9YG8IgYXayQwSYskWwHHLffAvdSRipJww3UkJHILWh4ynaecFkv8XEgM2VSmNm57CbCbVWBEbihSGRFbN5doLBRpNKVEQYhXQ8evl+6vl+XCPQsYXQCjCkMsiEMzQCiTQ5hMi8FlTcwUgLrdYvFIo0wokbaCKcOMGJfYyQGKGotI5jJQFGKLxwGZWGWEmPSvM43fwId17/XcwObKLW9pmrFOjmK1hxQJTUiY3NV56zk0o34YbHjxLLiGObNrHQXyNSmtpyQqPmIARUu5r+pR7UfYRS6MhHtU4xv2OM8tQiFBT5kseoiBkaGGEmEWxwPYaTmLxyuHx8mJsu344xhoYfEyWa+XZI2bPYWMs9Y8bBzx+a4MOHJ9nQC7j5ki1ct3uMimdz96c+xpcffJDrhvop1foZ2LyF0V2XUqz1rc6HNI6xVshN/HaLJIqYP3mcwS3j5MtV5o4f5ZN//gfML9d5YscVzA5tYnLDZhqVASCz8O099AhKp/Q1FjBCUGnXGV6YztxGV7DtmusZv/Ia8tVBPvHuPwNhsXH3tZQHRwm6IY25aXSaksaS6sgmLLdIlEiWGhAFBisNEFGMSQOKfU1u+76Xk0SKJE4JOh3KA1UK1Sq9Vkxl0CNon8Rvd3Dzm8iVK/hLbfJuiqz1kS+7uAWLpYkOvRMtrKKN3wjxjzVYPtpkqpeQk5k7oBICV0CfJXCUwHEVVpjinCH5EGAN5dHdGN2JcbaW0e2YZPHZLf5oNA+UD/Cng//Egl2nmOZoWz0u17v53Z3/HdO0eHSqSRT2yBUUXyh+grlwhnzcxyX6MhbadRp+g+nCSY6VHiOVMddO3U7SLDE1MkeS1Aiw6Sxfi53mkCJzO20JQwzkDRS1AFuwuc9ha6kIvsYNDUMC0maHMFlGtX0QNqdlh0fthJ8YTwi8OtPRHM8fvZ2l5hxFt0R76y0MDQ8ihOCSkTIlN3vWCykzlkNtWJ7prj7PbFfRa0VMTs3ztzPvoZ4u85/2/hyltMri8UmCdge3YFGfbZMOdPit7h8w6vbx+7e9i/HRS6nPLtNciAl9Q2vBZ/b4It1GjzTpoew8268epjqcY9tVY8zN1Tl85BRezWLJmeb6bVfz0PH9HD09wVf1Z9lQ3MA7rvxNXNdDFR2CJKAe1HEtdzXZ+xkEnRi/kynQYS9Ba0OnHmK0QSpBpx4Q+SnV4TzNRR9lSS6/fSOlldiu8z3HjTZ0GiFewUZagshPkFLgXsBK940g1jF3T97N40uP88LNL+TS/ktJdMJvf/23+eDhD3LV4FXcsOEGrh+5nps23HTBeowxPPLZT/Dwpz9OfXqS6KrN/MPoV9gWbOI3D76FPneEO6b/HNd49JI2kc7ui6JV42Ub38KD8edxx6scvOfLuIUCOtVgDG6hQOT7KMvCb7co9vWDEAyNb2P3Tc9h6zXXkyv+n1eUz+hoaRxju/83sFk++qFMoZp55NlXpFy4/Rfgijdmytddvwv5PswNP4EYuyEj5AA48jkYvQYSHz78Njj5lXPruuHHM0r8239xvStm4zScuhc+/OPry7/0HbDrpd+6/GOHPp3laRMyo/S/+/ezRNjSOleBG38uXPa6LIZtz2syav3Yz9whv/ibmcI5/txMES6vBNRqDfUTmZXxiTtAObD7FU9NMNJZyEhBctVvTR8v4luOTtRZVSZONE/QjJp4yqPiVthe3c6m4ia6SZeTzZMM5AZoR22aYZOqV6UX94h1zFWDV2E/ifzFGEM9rDPRnuCR+UeYbE9SdIpsLm3m0v5LmWhPcP/s/au0531eHwW7QMEusKm4iX0L+/jC6S9QcSvcPHozsY7pxT2UUGwqbeLygcuZac1R79bxZY+H5x/Cszxc5eInPr0g4PjSCWbiSaSRCCQYgaVtQquXKT4mwdYuqYy5afQmCnYBS1qkOuXRxUdJdHJOfFTVqWIrm4JVoGrVaPe6bFLjlKlifEVMRGhCarkqA7kBap0R8q0+HOkQi4hUJ7T8DkvxIrorSfMBOc8jSmKWypOYYsimZDsYwUu2vwiTQJRoXFdRGcgRBSl+K6LXivA7Ee0woZekJFKAJWgHMc1OTNFWTC33aAQJjiPZUHAxsSbWhnaScrjtM9KfY262hw3UEkM1iZHSwawotilZvLsAmtJgBOzpK0ArRgQpUgsEKVL72KZDTkXkyxbdxKC0wWouYNo9UiOYrfWTWjFlEVKqL1Nodnl41+UcHL+E0eWIsSWDpZ/C9UlHeP4SWrkIk5Iql9jJ4jEMmkj2cFIXIZ5ayBA6RuoYKwnI+YtIk+AFy1hJL6vTLmIQGKkQxuCGdZyozWK1n26+H0yMlcQsl4u0PIuBriCX9uNEPTA+PS+H7xToui5CWNR6AnmO7e1fF1IJahsKVEfyhBaULEWu5JAEKVob2ssBvWaE5UiSSNOpB0glcfMWbs7CK9rkijbKVuhUI4RAKkGp30NZEmVnQnBlKEdjrsfmPf3kyjZppLG9p1buIz+hMd9j7kQLvx1hOYqjD84zsr1C34YCuZKN344x2rDz+mGMNqSJoVMPKA/kyJVsQj/g6H33M/H4Axy464sgy6TVPWzesJM4hCTsEgUxTm6IXNlFJzmUY5MreghpE3Qius2IbuNcK+JTwWgfIQLcgsCkCUFPINX5Ez6fc5y8sEuYbWvi+MJz31UpSIHWEKcCnjSflMyEdWErlCtJI41ODXbOwslbmNSQRJqwEyNyBq1TpFC0pU8Yh1iJwk5tpFYkKiFUHUKrQ9Ufwk3zpGh6bh2NJrR6CO1ihCZVPpHKXABjFdJxGnTcOkZo7NShGPZR8ocpJEW8JEc+KmOEQZnzE80YNAiDMBdeONCkRJaPFpq2u8xwZxyAo/0PEakWli6Sj0vMF0/Ts1vkA4uBBgw2PFy7TKoLSCpIVUHIKra7TKF/hMb0M3cxPx9iGaKFxk3Pvc5CLhKZEKElij6EeGapBULlM1c6wb1b7qCen6EU1xjtbIXYpqSLvLF8O0en2nSDiLIcwbSe2t1TyIyw+0L7lAX5smLHtRuZOrxMr9nDb8ck8ZOvhyFXBK01+bLNwKYKpYEcA5squDkL23M4/fgUEwdOkUQWtqsY3DLC0HiNXFFQn5nnROcQdy09yMbuLvTxKvtG7iRWAVpolJPS0yF26jCqh7ldXk/OLWGMjRAp/Zv6GRyrUeqXnNx3H/ff8SGGt26n22iwNLn2vg7slI/eNsObDlwHM3OYs9hb+jdtZvctz6VY62fiwKPMnzi2dqxYIykC8IoljNEMjG1Ba03/xjGWJk8zc+TQythJ8pUq3foye29/EVHQI1cso3WKThI27b0cr1gi7HTQaYqTy7HjhltQlrX6rDTGoNMUZVkkcUzQaZMrlVDW2vusOT/H5BOPMX/yOI9+4TPEYUBlaJjm/Bw/94FPfGcqc1s3XGL+6Jf/iVzJYfdNIwgpMFpTad6D2nE7i5Nt5g6cJHr4DvrFIaTQdCvX4N3wBizdZblbIwo0y7NdZo+1cPIKr2RRGXVZWmrROaUp9jlUNnokUUoxX6DU56FsSb5sM9+Zx58+wJj+GgPjGxi+5gdJ8qN4hadZrWhMwB9etn7bzx+HU3fDl34bdr4EXvKbq7vONt/35hfIDw6ATojvfDf2/EOZy2dpGE7efa6L55Nx+y9mSp7RmUvoRXzbwxjDcrDMTHeGme4MURqhpMISFkZDY7mDCQTBAkwcXcCzPUzdQaYKSzsoL1tty1cd8hWbbsenueTT8tsYqUl0Qrk1jJXaTFeOUM/NEVhdlLEohlV8u0PPaRHLkFTGRCpkuDOOMAJLOxTDKk6aY7J6kIODXye0ezxn43M42jjKbHd2XV/OEFdkHYP+3kYqwQCDyShCCpatOcqdQeaKJ1kqTFMJBrksvR4dCJb1Aptau+jrjiKMQmmFNGpVKAhVj9DpYhsHY8CN8yid3YvC1ZhwvQCkCxGRE6B8BzvwMBh6TovI7eK7bbQx5B0P3edTTQdwm2Vkw8PyJFHb4OQU/hk/+GcCSyA9hR8kJNqQAo4BpMBNQUtQ3wAbQrzyelKAegYKQygMltGZcvskgduK26ikSyoTlE4Ah9TKYScdMILQ6UeaBCvuUOzO4UZNnKhNbHl084MEuX5SVSJyz3X1EzqBFQXpHBiNFyxTbR7DCxbx/EVimeLn+rBjn3zYpdCdI9XL+K4FxlAOIpTWGCtPu7iTRnUXneIodtSmlsxQ7hOwcZjZFnRnTxEmCUtFl3o+Zqma576rbuN1d32GnccO0y6WyPfalAslgrFxtJIM9NWobhzBeC6N5QVEkjK3cQsDm8d57uWXE6Sw2AkJYk2YpNT9mPlWwO7hMn0FB2SHz5y+g30L+9hR2s1zR15JHBXJpYaT0x3u2j+PXFGwn3PZIFftHsB2VXYtLcnSZIe5ky1INQ9/foJC1eWqF2zCkoLGUkAUabqNEMtVtBZ9wl7C1isHGNhYZGm6S2vRpz7TZWGifd55ajuSap+HtCVKChxLkgYJOjUkcUoYaYJIkyYabQxKQGIMWl94jlkSEg2lvEV5wKPdjBjdVsG2BD0/pjJaYv50m5mjDdInMds5liBKnpm8oZTAADo9f3k3bxEHKcYYnJyFtCSVfg8ExGEKEvKejWMMRUdSqnpIRyIKCjsKsAONCgRIieVK3KEc0tEcP3CYypYqW664jGSxRzzTpdnscvTEPEEHSEFIg5aSJEmJkhQbhUmhkwpSMgExbwlyQtAyhhNovBQcLfClIaTHEj6JSAnDBksiYcot0rVKpEhcHeIaQc14lFMwwkYKm6oWGNXFsevYqYufVLC0g2cEAoMAbBmg3QUSq41AYqcOlnYIrR6h8omsAC0SLO3gxiUq0SDa2LTtCCVSRFxAiw627JHIGCMMpbiMSjNLqheU8cx6ZUI7CX0DeVQBFpNFQneSgjLYVkQiAx7vLTKVZGEcWmgGehsB6NktOm4DpS0G7QSfhNP2EqEVELrLXJ1PGbGzB6ZObfyHf4jti1dnzy4yC7vUF5bFlnMzdNxlNjf20naXiFTIsb4HsMIG5XgzQpSYqh5jOT/DLU/sxC8UmS3PMlWbJJUJWiTk4jJKWxSiCkOyxJZwgNOhoe0u4dsdcghmvDkWi5PEam3R4Cf78lgz23mgKyksXk1CizQ6hHCHGGhtwlhluvYkG1sSFY4hnXEEilD1cNPzK2uh6tFxGpzsezR7h9sd3AhAU2p22FCvMFvr8Nj4NDceqFGIilRVjsKyjeVtRyd5MAqki1SjSNWPMQk6mQTTA7OMTjW2myMOfYR0kXYZlEbocYS8EG9FgFAdTJono5v51kNYXezaIex8ByMDIr2Apbax6/pbOPrxD7L1qmsp9w8wNL6doW3bUZZ9XqIpgNbCPJbrki+vpCBJU6S68MJCc36WYw/eh99qMnfiGFMHHwcEkd9bVQi9QpHgAoRNbqFAbWSUXrtFY7kOAhzbIY5jtJQgBG6xRKWvn0RZ1E8cQwRdBLD5sivwWy38bodSrY9/99t/8J2pzG0e2mJ+4Q3vROg+MN+Yude4MYkTMVF9AtFx6euNoIxFLCOmKoepBINsaG3DMs+cYSYdyIgERKqwIw8jNIuVCQYWx5GpwrgJVuChqi3Gg33s9u6iq/twRYeZeA/T0R68wWF6DFJf8etVMiHV2eTb5D5KN6lST8dwRRuNhSUCXNHFlV3qYhf9m8rsvUJDGrL50hq51mOw6TqSyjYWJzsUKi5xmJIvO7h5azWZok4yV4MzEFJQn+nSbYYIKciXHfo2FNCpodTv4RVsgk7M3KkWUS+hPJDDK1oUqi6desjydJdCxUVISKIU27OwHYWQYLsWnXpAY75Hc96n14qojeRpdtp0fR+/nuA3EgpVh0qpRLHfYevlQ7STFt2oR1EVUSgUFqVqjmItcxMwxrAULDHdmUYbjTYaz/IQCOI4wZUeIpE02x3SSFPL1bBUZk2RHuwY2Xpedzu9spz1dBTrT0asY5phkyV/icn2JPsX9zPfm0cKyUBugIpVpdPu4ekiUxMLsORiMHRNh45uEXcMlnawUxcn9VDaRhpJORigEFVw9Hp3r0gFSCPpFJaJdUQqUoY7WzKrFNlDv+s2iWVINRnESEPQ38OycuRn88hArVIPa1sjL7BarDEYoQlUDEJQiNdWGhfzU+SSIq7l4JYUjnSwcHBsB8dVtDtd2o0Q4T8zty1N5oKjbMnOa4dQJCy3ZwiCNjIWdPMVeksJIrZwSSD00WEH4bdIk5TYKhOGbRIhKcQ+Y+05OqXNBG6VUmcaFTXouCXahWHsXAlj5ZFJghYeRjgIneBGDQyCnL9ILGLiXBHHRBjt01MuE8ql4eXB+MgkxI0icmFAMQrw/HmcsMGA38BLI3ISSiIhsR3ayqWFQ2w5CCQPjlxHxyvTX4zo7y6hpKQkUiypaXcgMg5CJiwNePRcwZa502xYmEEYw+Di4oplyWZ6aIRuuYpPAmlKqdsjH4ZsnT7BcH0Jg6CXHyaVNm7UROoY+wJxeJFls1SpIowhcFwmRkaZGRzGjSIOjm/n3r1XUfZ7XHviCeI0JhEeiRHMDAxQadfZOH2ETTPHKYQRkV0GVcR3HQqdBUZabYbzOTpRj6YCuzZI/yXXsmX7VRSKfQRBm+XZ0+ggYWTzbgqlPpJuSNzxEamgvHUEe7SAKljEM0vEM3WE18f7/H/hs707KesCW+wxhnUfl53cSKnr0LQ6hFNzhMWQrVdfx9DW7fRtH8PKZbFJwsrY2vTKJ+lEPNE+xKlogtlkjt3uTq4qXU4y5yMtxYJY4s70Xj7V+QITyRQWFgnnuuaP6iE2pEMcVxPkZY63538YJRRfad+LH/nMinmWVANfhlyabmdnsIWXzt7EkOgHW7AQLaHRDCY1rP4cVs3D2VTKLB0lG91OiKc7JPVwte0AWAITa2TFRWBIu3GW00kIIhFz1DtNIlKOuZMcy52mYwXZs1No6k6bRKWcltNgIBdnrkTKWEit6PNHGOpsQWmbWloldXw2T12POs87WaNJVESvNMm1yUakHfJokmMBi05pkgDJ5vYmFtyUJe8UjbjH5c0xvNSj7bTxVUrbbjDW20h/WMSWApVkxDMtB3YWFD1pmMpJ3E5MzxjqwrAkQ+ZL+8AoGnad7sDnkNpDGwtpFFvCYa5pXcfW1rW0Vx5+E06IkZLAPsEVnXGkcWmg8RAsY5iTXfbJHhMiQnmzGO1g0hxGe5DmMGmObInl6SFYz/aeswWOJWj5mqqXMN4XM1QIcGTIXAe0PU+qlvBp0xEnwW4Sa0FPrhcYBykiMMyzPjRik3LpEzYWgvFch1HPZ5+vuLWYMBdLosBie5DHkworF2dCflJjZPxKlFvmdN1nQ87gFlIWFj+J1mvPDZ3Y6NTFUn3k8n2kTBFF55L4uO4ISuXp9Y4zGwsOBQolYNjK3rOOgKbawDVjr+bqjS+lWLyERtgkSLrIaIa8XSCfH+fkqffQ6TzBwuKdzMeSYdfCVi5pmoDOodJdROS541idk4GDb7dpegvEdocUQVVpGqnkxpwgwvDwWY/A3bkCP7JlO8MyItUdJHkmwzY6niNNeywl8NmWzaBleG2fTV9xG08EgisHrmBfu87vH/wSAGU7z3hxgP318zPg/tmuMdJoFq2DVRISRLQyNwYJ5vfwxAM3oeI8urLIzssTctVFPrX0FRqdPANewHh/i14CdR0wGUkOBYrOUyy8nI2CNAxbmhvzcGUhxDWDdBaGsXIdnMIyASZbzCPleKiZjA0HA5hNJHlpuM1xqPZGsYMagxJcbUOuTis/z4NyGQ00E0EpLrOlfhmpgZOqTjPK0ed1eUFeUB08hu4NQWIjrJA0yuN6baQVIVSItEKETBEqJg2L6DhH1BmiO3cpjWO3Y9LzWDoHDrDsTvMDP/BjbN26FYBWq8Vjjz2G7/vs3r0bz/PI5XLYto1t2xhjCMOQY49P8bUPnqY0ZHHdq7YwPNpPoVAgTVOSJGF5eZmFhQV6vR6VSoUoiojjGCEEcRxz8OBBkiTB6BTLdrIYaWFIUk03jFACwm4Xo1NEFNA1kMiEfL5JuTKP0RKlErRWBEERhCGJs+e3pwvYrb145QS7P0WQ0DxY4cd+50e+M5W5y7yc+eD4OInymBu6lnp5mELvGFOD48SqSSAnScwUoW1oVvcQuRs4NjRBLEOkUbSLiyRe9tK6ccON7KjuyGJPpEWf18fJ5kmkkAgjuf/Ew5QrefwooNno0leocuXgFUycXCCdc5hoTVDzR9i+dDXL+Wl0PkYoMgUhVQwtbltt93JuhkowhADkU7gSPBm98oPkW9ciLJ9CfhY5FKOXxunUHQpykbK1SOyN4AyPs3C6na1Ano0nvzFWYLkKL2/RaYQXzB9yIeTKDn7rm3NNuBA6Th3f7uAkHm6ax0uemrE0ViEGQ2h1MRiUtpDGQmkLZawLunWcDY2m5zZJrJCGu0jXbiIV9IUbCLWPMjZRrYU7BJZU9LohFja9XoAb58kHley6ez0iOyBNNVEnRSY2mciRKWZ5UaDgV3HDwgVX2tbB0mgLEgmWozAY0rwhslNajqBrDN00Ylq2yC+k5Np1tBD0e4r+xeNo16WxcYhYpiSHp6j0NE2nSNfy2Lt8kk2deQb9JqWohwJiy6NuezTtHK7WDIVdek6RspZEboWBpcexkzUBwSA4sOlWZre9DiEdYh1hSRsd17OYI7tKvn2KxC4QW0ViE+KbCNWbptyZotI5SZjfyOnSBuykS9dy6ZW2sKG7zKaZexloT1LP9THUW6bPr2NdyE/kSYgsm1Qq3CgEIZBGY4Tg2M5LWajWyLfaODqhWSyxefI0tWadXJi5DKVS4tt5sEos5aBZKtMsFulvNRibn8VOYpwkXheH8/TtsZjrG8R3PZrFElaaMLS8mFmYhKDcbVN4Omr5JyEVksVaH0ZIrDRhfmAEO4kYnziJna4pFIlUJJbF7NAohy+5nP2XXkkY9BidnaTW66EF1CJNc3g713VySKeAkxtkMa2jnBKFVNNxEnQKl7QFJXn+ZK7apHSTFlqlaGVw3TwOLtIouk6Po84k5SjHSKeGY+cQkcAt5zCJzj7RMzRPnsXrblb+9WTAl8sP8HeDH6NlZfOznBRWv5+NoaiPmzpXsD9/mLz2CGTELn8LL2ncwr7CIZ7IHUchKaR5ZpwFHs+fP1nsuiYZyXXLz8OXKYI8Q/GluOEWJpzjTOfvI7CWCZ0pHF2ga58/kbWM+9BWE5mU0VYDAC/eQKiaGJX1Q+oceX8z5XAIrVJa3ily+Wl6qcAxLjYuEsmg6GPMtnFlj2ndxEZxfS7P4cTicNTGIDkR1THyLMtdUkKRR+KihMJWFhY5cnIYT5bYXBonMQHLwRx+dwhft4isI9TZR2ZvhmJUohz0M10+hkuOQTmOE5UR2Jyw7kWL9YqujvqQTkbGY1IXoZ7G9dEIdFxDxxV0NETqj2GSEml399o4urNYxYOo3ElU/jhCrX9PWUkFpT26cQmVP4EQKWkwjNE5lDeJkOvbaIzCRDWMUQiri7SeOhZWCZuN3nZGrF1YskrIEpHu0kymcKXDgBog0V3ydptavsSQu5kkPITVnabgzDATCzZYkArD6UhyIrQ4FUk6KeuWCQYtzZBlcNxhLikPc9OG61kyg3z85BeI0pDF3izCBAw7LtdWBrm5byeu8BCigMFCqRGkKCPlGGkao7VGayuLX0xTtNarf898zkaSdOn1jiNkhBSzCLmIUrNAB50WSbVLFI2jlIUUNZSqEUUbCMOIJEmQch7bOQakaJ2x2DpOAa09wnBXlqtv5bxPbkeSJHS7XaSUbNw4wuBgQJIMY1k5HMdBKYVSCiklQsbcMfdRTvee4PXVq3BMgtEJjuNg221gCQSkaQ8/WcZTZbTuYkyKMXnAA9NDa4skrZGmDlrHxHHI/PxNGG2TVRBTcBXCLdIwLdrxMpu6AjuqM2fXSVTCR4sHGaDIQGzzgso0W/M9Wo0hCGyEMCTaohb2sK2AJGcwpQC/arBjjRtpQJAqWO4O0YxqzJ64FEdrYmxc22fTBh/XqtOTBlFY5nQUMk2XS41F0KoRqoQFHGbsgK+bbB67RhAKg4fgRY7gmlybL/Ucvh7bnE/C24LiFOl59pwLiUSflYRDIRl3+hhyylzmXMc2cRX1egOlFI7j4HkeruuSyyUIOYuSCqUsLEuilIUQkLNd8p6gVLsKY8Cx+3HzHp1GwId+78P0FrNci+Xxe+jVHsdxqnQ7Po2Zy3GiKkI7aBnihv1YcYnU8kGlqLCAVhHqPK6yqfJJVYARKcJIMBKtQowwSK0QxiKxuki3jVuapdg/T64W4LrLTJweRMoiuXxCsWDQJiGfP4UQyzTqI4yOHkAnDkFjC93JK6nqRfzFHTT8reAGOOVppB3SrW8nbI6dO8aWz0/+6Su/M5W5q/dcbu750Cdonj5OfO99xI88StrzSbvLmPYipGnmAByvTcXp17+ELeVb8OwCLC8S4SOMIpqdxRq5CilriLyFtMHYKWZA8EAioJqjtn0DrhQEBk4v93AsScFVDAhJsFTnWPc43UZCnxzGK9fo9XlYUtDuRIxJyaXCIr/gk5xsoOoxGvhYK1z1DQ+sLifHvoAvYppEaNVlMTfPcn7uye7x56Df66dgFyg6RZphk1dseQXl1jDpaY/0SIF4SeKMpDTcBWaZoOe0aYglBuUwtWgIVS/gyy69Yh0rZ3AKFsc7x9GxoeUtUs/PUnWrjIntDHQ2obVGhjalXj+LYpZT7iHa7iKXty5j3N+CSTPlRXhNRJIjUSmD+RrVXhkndmmKHjFQw6NqLDxLs5Tv0LIicqpAiqJrJYTC0EqbdE1IElk4voMtPDAKLzEUEwuSkEYSsZhPV+JlLJS0cHHJpQKpM3cbOzHYSUwOB1sIHAS5FVKDRtxEGkPbGNoKQmUh4jIyXVMAtd1BiASi8qqV62wYDKheRrGsC6tljEiQMkIaiTGZBTTSKYFJ0WkPFTfI+w1Ie1TSmKHuND07T1cqpEnxoh6ujkiVA26RsnTwdEqpu4AM24igBSbNiHZM9qB/1lo5IKtbEE4xO15H6KAFSQBSYcImpjyMdjyk47BUrKEF5IMuqVAQx+SaszjNBVJpo/S5bl0L1QHm+obYPDtBubdC5S4EwhgWtmyFTofBpXNXcFv5Iou1PhLL5tTIKI1iiU6uQNHvYiNIlEXN9wkkzFRqHBkbZ3JohHq5gu9663zfB5p1jHIIvDzlKEEayIcR5SihEMWcKrtMF3OUu23q5SpaSmSaolfcLKTWSAzDfo9UCNrKQivF+MQpLp08SdeyCbwcsZcjzOWIcjkSL08+0Wz2E0ylhhQCx8CAH6N6EQiLaU+B1lTbPQZOHyQ1CSUtkMrGy5XRKo8UFkORQ6Ik5WaDgYU5hFsmLQ+jZGYFCUWMxuAaG61D0qBBqiy0skhsGy0MKXr105A9uiJAGoEwggQwApYcJ3MnRZJ2IiwJnjYUE4MlBZEj6eYcgnyJTRXFoKdQQjEVT+JEFlYXPi8eJJJNerKHLW1aosthefS8c68/2Ugp6achG+xq/iCOLKMtSWAMQZKiZEA518EoQ080sEyOwVyJSR7hRPIQHZGlJlDYpKzkuzIVrkp+HqOrLCfTNIIuHXWUKPcoxj3PCrl2QJ4ltkQDaCOzbdoi6ewmbl6LScqo/HGkN4NQXUxcAWOh436S9h540rPBEiklO0SJFFsmBKlLL7GJrTrSncOkBWxniVK0iWpunoqlsWRCkHikqkHTmaDhTKBlj1rvcjA2XVUn9k6DWkvzoqMaqT+Gyp/EpAWE1UFa5ye6Mkagg40gEkyapxRtoSIEabiBPjsh0Qo/KQCGZlgh1TYCSaQVjWglRYFMqDodjDAYAwO5RTSZS9/RUCCdZeLGdevGQ6ARQjNYeQKndh9ChKRWm7zqoY2gLFwCYgaNRxEY1QUa+Tk6ImaLDa62KNgpTyQxD/hyxXVxDdtNP312yLxocyrOXpo1ZdiuFGPCASR5bbHd1ejEo9kawk9cuk7Mw+4JWgSAoSpsRp0IC8N0LLGFwxNxmOUQE5JdbsKgFaM1lIVhkzK0VPY866Y2vVSxmMKDgSEwWTtcYfAEhCbLnZw8yxhKS1sM+oPYxqYclRn2h8klOVztcLaAoJQiTZ+ZkP2tgBCCYjFb2DHGrIaFKKVQUuJZhkLaxCQRcdDNvBxsiWdbWEqSKodUuiAkEkPg90CnWBJyBAipyBkfJVbiNqVACIEQEiklJeGj4jZP9Po57bsUREjBdHGICHCQWfQrCRY+HjYxKRJbgiNSZBqQomhQxiHGJUShkes+Z96nmcU0pwyuTLGloSgjyqZJIV4ilzTx0uye02Ru/fIbyiR4LszKvfVkaOkgn0U6mbPhF8boSLD9eSpJyB3FAr/TV6N9FltnLU15fs9nLE6wjGE0SdgRx2yLEzpC8ITrMFwYobnpeu6QPpGUtNKAS50+ROzzCllho3TZr32qTplEWmxAkdNJJl/4dWhOZeR5lpeRDXbnM8JCueIl5NdBx1lQn7QgjaC3vLZt5PKMYR0D/TsIi5upL5ziU/e9iF6Y0f3bhQXi7oWp/6WI0SveBKP5RynaMwzUHmK5u5NFsYlOZwsYCdoiCPtQMiTVmTVQkFJSC0iR0kn7SczZ3lIaKRJq3kly9hJVe5IgqWLplEjnM9nQ9llq72Up3nZOuwas4ygR00qHEBgkCZfnP8XO3N2A4VhwKyjJ7pET5P/TV74zlbnKhp3mxT/8h5SQbEDRjyQfB2y2CwwbgbMisFtRh3j+CXjgr55RvaFlE9ou+dDHWqEL10KwVK5xfOM4h7ZdRlAdRuQq+IUyjw3XuOrkccanJxhbXmbX4/dhdEwqFb3KENJyKeSGyHUaiHw/sm8cNzeEcIoIO8uvYsI2wi2vxrAEMuYr/V/jWP8C5eQSbupsZ7DncMpqMrF8HBM3KNV77K81Od4XUjEhe4/OkMTLKG2QWrNcgke2C46NrvXNwmNnejVWweISOcplkxvYuTjAVL6BcRz2nnaJJ75O5DkklqQo+0lNSMON6Q0M0ZURUdLGCIupik8xFFzT2EK+FyAaU6AchFPABA2MXyeNOqhcDbTGmJRQWcjiEF5pEzJXY7k7T0Mm1GWKowVELaLGaYxOMuFSKSJlkUjJ0OIJ7NjHjgIMmdBZ7jYohN2VaySRRhO7RYy00QJcv4FYmcOxsrHTmFhZJMrGAJHlsFTqJ5EKo2wir0LJCKp+j7JbxkFh4h46iZCkgCC188S5QVJl4wR1RNBChA0UGt2azh5Qdp7UqSCkQPQWEem33nqZSkU3X6ZeyR5QpU6DU1suIbYsorwHUiK1ISiUMLZDsdsFYViq1pitVvCNxsQJGsHRTeP4xQKxJQFDIhWxlBgBXpJSCuPsQaI1h6pVIgQi0dmDNjWIxGCE4UUHvs6Nh/bz0dteTK3d5OEdl5KsvE4jLISBtOSwffIkTi/k0PA4bhQR5HOQagbaDSphQi1sUvBbBLkc2q0Q2zYBEEtJLo6JpMXpXIUkNYhQIyKNm6RU/YBSGJGkhjQV2ElCIkT2OtUGLTJjjlh5SSs0MRJtBLZIsdFYIiV2bTy9QrltKdwwJE4lobGwhF65l7I6YhRKGtBnBLSVeB4jSVeiVTQCtfJSV2g8kY3KGUHDW7FUpCajyXBEjBIZPbxaESae/CI/o7JnY6tIjVz9zcpfwxm1Xpy1L6tPmpRh6vgyx0Kap2k8YqOIUWgUsUjwrYQoHsIioYRPhML3llC50yh3HlU4iuptwrIbJN4c5kkWFR1XkNrBWE3QOfA3IjrbEPkJsOvY/jC2O0e3tF65yoUlqt1hlovThM4F8lKuwA3LWNoBDIWwwvbWALUoh6UVKVaW2FVopDAIYRAiE7RCY9GVUERSFh1iKXm4tISjc9SiCjWjKFghjvKRGakergyRcmVxSBjydpfh3CyhhsWkRqht+vJLlLwOeeXjmgRhsmtuUoUkxUhILEk9KdJOipRVh7LsoWIPHY0iTBXHAleARZUohG63iRYBrqwghQcmxLISJmggKKKbZdp+wlYxTZ/oYosUJTNF5wAJTTTbY8mipZmyYGeoGNYyYxAUBletkE5ogRAJltVCiDRzQxQJQkYIMjp8LTKZxok1MhUINCqRYBRaWKRYdIzFvCihHYEFuEmaCet2xsaYMyGWya1YjgW2jjAIYpXPrpmyEXYOYdIsvZBQIGTGDmoMobGIjSEVHRIr5bi1zG8R0F6Z+xJ4vRznMnuU67wNFF0bV4HUEULHqOZphI7RRhD12ihShI6zTxpikhChk4woJ40gDdE6om1SKiu5xs4HA6u56wyCSAh6lkUsFGUMyhi0tAlUjljlaFgVqpZDW8Uccgok7XkmlaaExRZt85iVslHbbNOarXGMFtYKQ6qFFmrtu7Sx4yYqbGGlvZVPgFwZV4Rc/ZuRlZ35LrMYVmk/KS3QWYqDENmoJkG2YChUJlBLlX2EQkgrS9mk7JW0QyIrmzw7L4PvSDhFqGzK0k6VRyHfD145Gw+jMwK60nCWc9j2MtK4uAdRNzt29tG1NFq5viw3r9HQtw2cPLRmoD0N049k9eZqYBcyhSYJsuPtHGy8NqtTWtk1kFbGsB40M0ZyO5d9LC8jupt7FBaPZOXKG8EtgbJpSsXD8TJzJqLm1njJyEreYDu/ks9ZZCR4aZT1ZeqhLK3X4pG1FFZnwy1n50iCtRzDQmbEg85KneVNWZ8TP5tfhYGsbpMxSZKrZXMLk6XVspxsrHLVjMBv/mBWj0mzdrSmAPB1mX9cfDe+rgIgidngHOS5pb9kJtmN5y7SV3kCLTVSSjRFBBn7fN4HR0tUtP6dZgxEJo90fMKcQ9eBjudkuVKtGjqJiJNNxOEQvWaOZX+QTtpPw6/QiauEaRHP6mGMIDzL+mfJiK3Ds5RLCVu3RkSVSxi55bnYpgMnvwr+MsTB2hilYabwQpYarbeEeNPff/soc0KIlwHvJnM2/ytjzDsvVDa3aYe58q2/jk4FzSSHMgaHTOjs4a2uiGgkCYpy0OWKxWPE0qISdZnL1VjMVRAYRjtLbOwuYKcJuTTESyJ6lsdUcQAvjaiEXTa357hs6Ti1cM29YqowgKUThv3GurY9OLQLN43pC1rkknDdMWdj2StRDrurbmOpkCwVa7gGJrdcgwpa2FGXgt+m0l4gFz61YHM+HN22l6VinpFWDy+KSIym4+Xx/A4jS9O4cUgiFaHtUvgG6r8QYqmIlUU+DtEIjAD1DOaTRhApC2EMyujVsVnIVZgqDNCzMmuLMIa2k2cxVyGSNm4a4aQxXhph6wRpDHP5PnqWSy4JKSQBdbdEOepi6xRhDKW4x3BvGWFg0G9kovdKvcO9ZSJp03Fy9GwvUwoNuDpmuLeMQdD0ijSdAk2ngJMmzBT66bg5XBNTiAIEhrZb4EjfGD3pEBtFZNkklqIUBwit6SmX46UNVMIugXIILZt+P3ugaCFpOXkiZVOKegz6DQLLoWd5zBb6SOR619FMfE3RSFIkAoNLjE2CwGCTYJOiRLqqIJxRPyxSUiQWKZ6MEQISIzBSEmMRaos4tYixiMj+Zh/Fk03HAoMUhtQ8WewxK0qMXl39VOjsnER4IkIAMYqGKeISUxNtbFJyhDgiwSbBIl3t08p6P5ltNDufxOCQojAoUhQp0qyttGJMZhVEYIzGJV6Zo9lIaCFIhFwhFsna6JiEAgkInQl/K2qaS4rG4JDgkRCjVvadUdZAiEyBsiS4hNgmxgDJaovO9EGgTaZqQmbVycTj7Lqd6bcj1sbgzDW1SbBFQmwslMjGVGCytnPWuIkLr9ofty3+tlJmwrI46Di0laSSappKYpnMic6sLDh5WhOsCK67wohtcYxjDNvjGNcYbvYDtsXnT9R9Phjgn0pFHvZcPlXMrD/KGFIheGujSTXNRmhznGBhqCtJXSr+Xav9DCOT/h9AaTQTKKVaoa0787w12XdlZ3+NXtt25q9JVwT1C41mdq+YpJsJnMVhpFvNjhcSvEom4KUR1E9iFg5lQr4xUBzMhLAkyPYXhzJBNleFJMqEVGMyQSXJlCeSKMtpuirUrXx0mtWTBJlQatIzPeQrOY+cMVwdhFzQqV7aKwLkxhVh28kES+Wsfbec7Pfqd3dNUTn7u1taG+fOXCaspvHKmK60NepmbUyTNatC1M3YpcNO1sews2KNSGDjdSvpkOKsLp1m42Pns/06WdmerJVJQsj3QX4gK+uWsz5a3lnX96wxPLNNp2v1rBAUrb/kZ/1WTqYUmHTluPSs70mmKBiTXRejs/lg57JxKgyuKAtONv7Kyv4KmV3DuJsdK1feJWeUxVwt236mrvNOSwluEU58JcsPXN64Nr/CTsYqLhS0Z7J22flszCx3TcHpLmRKj1PIxk45K23IFhZWx8GYbJ+dz45TTtaXi1i5B+az+ZzG2bXL960oYWeVScLz53/+VqKzkN1Pdh4++yssTPdomjG2XtFHNDSGu+2lxLZFt3cMP5hkeekrLC59Ea1DqtUb2bHjF6mUr8zqWjoGfgN6ixjlIgZ2oHWCrGwGKUmSLqn2cZ2nJxQ02pCmGstWq79bSz5e0cF25HnzFz4bfNvkmRNCKOAw8GJgErgf+D5jzIHzlb9uVJkHfvz8cRvnQ4wikA6JUGtr3GIl1lScWb/WmYC4sl0bRYokRpFISWQUuiEwbYGeVohgRSAugdqkoSAoez42aXa8kKRG0os9EluRLguing1HNKJjsFopUcmiN5ajdKKLyQsSR+HNZJYcIyAuWFnQelGR9imoCoQ0WJ4miSVJW5FoxdJYhaZTIBWKUDtEoeSSh0+xaTpzXTOAX3RJLYXQhsi2aFaLxK5FLgizVVdLsrilim0n2HGCTDSpkphEUqz7mSUjZyETjQw10tIo16AcDVVItEJFGpMDcplVQWiT0SYLjUpTVD3ru+mAJROkla2Y4whk2ZCvhThqzXJBohGxwXLTzNXijKXCZIKypTUaQSIUwkBH5khXcu4IkTH9yTMCuFixT6ys0meFsuudCklP5+hSJDI2cWqRaokRIrN6iGy1smMkSaqwjcwWSIRCSoMQGmU0eR1i6RRpzlZazIognWTnN2ZtGwmpyJYeQmlYUpKmzNSFVJBRPJsVq6CQlLWmkqbYRmOhsbSmbFKMYaXc+leyIbNGZbHQmZVKr8wtvfLbrOzPvotVBa8jM0uRMGBhcI0hRpAIsWKnzFbBs7NKcqnE0ZlSCQILjVpRbIxYsy6lQtCTGbtbunpuQV1JYpGVOhOLlgqBZQx5k61sK0AZUBislb8JgkAKfCHoCYkv19p3NoelAHoia79tDM7Kx4bV37Yx2AYSkZV3jMEXmXrmy8wV0VmZOl2Z1V7WhjyghCQxmkQIYiFwjVmhpDfEQuJLiZQWllBYCGyTMQUmCBJjSIUhwRCvnD9eqScSEnlm5gtBikSLzJE3EgJfQSSzDgqTpQ/IvLuy71KAiyEV0JOwJEAJaCpBG2gZ6BjB6RW1aJCUDaQM65TECJSEgjDYGDakKZcQMyo0p4WiJg05aVaVPGEMUoPQIHVmCTRypT1ixWK40j4jBIEr0VKszkejXYy2VxcChFBIbbASMCgMNkZb6DSHjvoyV0gMWAakIDSVrFzsomMXYheTuAhtI7KRJgk1rrOIRJCkZSKTxS96uoNJFWnqkMQeqcko3bU+Y9U8e/mD1d8CjSfa62RfYyAxXmZpkgqEhRY2nptQLoRYIgJSUhxSXBLypDgkWhIFEGmXZCUORyiJkBJk5qqdCbwSnRp0KtDaYLQmSr3se2rQJrMWW65aJ4uejVUjjRCIs/+elbNMZP+tzz5zxlqzckx2foOQAqUETs7CsiVmRc9b1SeMWVlszxpitFnbbrIGCikyPSPRCJmlQ5Arf9PEYDkSN2/jeArLUSsWtRChA2QagkmJjUMUKVLfJ9VghEOcWmhshFJZnSsJftPYkCYaYwxSyZWMQmKtv2eGQogVw1a24UxMelZXdlxWJjvWkPUh01GyMmfGVqwMnpBrzyZjUjBnln+yhcM0NehEZ+N7Fqv1GZKMM2O3bvu6y7R20c5cG2nJ1f5LJVZ08azd2eNMrJso5klf1n6b829ft+1JZc4nTp6ZC08+9oInPrds1r8zY5vNl9XzP2nuYbJWnZl7mLU5CAKd6pX7KvtrDKvXTSqBsjKhO/susB2F7Vlr9xICbdbuh9X5K8VZ4y6zfVKQppo4SEnjFdbYlXOcmYCWLbFdhbIlypKrbTPaoHWWbsKs3Ddn8uVl7T6rXwa0zgbizP2X6ffr7z9jTObBkgm/6/dpc85xGIOTt7AchRQCoQRSCKSVzas00aQrjLNnj8G65Npm5UqdWVdi7Rqt7jdnXcvVbWfkt+x8li2xbIXlSCxHkSva2K4iX3Eo1jykEsRhiuNZ2biF6cq8z+6TNNEkcYzRMmPwTQy9dpSl93DVuvsbIIk1SZRdt2z+idX2mtWGsjpeiBW+g9QQhwlxmBKF6Rojr4E4SkkjTRQmK+z8Zu0aPel7kmia8z5xkJXVqeEt73rut40ydzPw68aYl678/mUAY8w7zld+7+aCed8v7UUag5VqtBCZ6GgkMlaZcGFWhGw0tgpQJkWuSLJGZwk3zqywr0ocBs64GQgZI1biSSytUSZb7TdCrAojqXZIU3dF9bBJpIMWmQgnZQJGYJlkdbVeiQgpArSMsRsdRFEQWQ4Jgkg5WCZFJTFiUWdSYzlTNLSU2Uq+EKRSZgqK1hmneSrw0pii8VGkODpZtWjFXUXiS5xaQmypzNJgznUVyYZFrNQvVoRBVlyyVl4uUq7YQkzmMicFRmVNOBP/BP9/e/cea9lZ1nH8+1trX845M9MOdAr0ApQmpdQKFhnbxgap3A2YqAE0QgtEJYJFVBATg6AB0X8sl0BRUC4pWiFgEIHYEDQKBaQtFkwhIFAEWqwt0DK3c85eaz3+8b5rn31mztDOnHP2nj3r90kmZ1/W2vPu/azL87xrrXe1ieTaZwDjYxWTzxqtnwbSZ7XJ3Tjxa3o0TUri1o53pPfror2eKSWu/bqCOvfwRS5MYmIHmmZMSVGkI0gE6fiIqrxMNEh12tHFWnulhvftHHLNKUvsbtIG52DRFh/QJxjk9bgSjNqCLLVm/HdcYIRoxLigMZsGRVpHF6NkiT47GbCoAUv0uax4BGeXD6QoeqjoIZXQiKYpiFih6B1ERYk0oNCAohikQkMNaUmugIqgAlUQvXSKZbOLiAGKPhF9iD40Q6LZAc0S1IvQLKRtxOTOe7xTTIkLsK7wICfZVR5GvyxT5SGlBEKljrgFw3CxN/7MaNb2cW1S2ybcKQEuUnJymLJU3uFOFCMwTt4gJVD1KCeHeWe8cqji4L0Tg02t++iU7AwXeynpyduONnGLZi3XTsVHW0ho/F2LNjEv0m9TbTQQFqwlRm2CwPqErX1xnDxxZEzapKtNoJsmJZorByvqqhmPkrwWq/WFI+PHjB9PJsHjgiYnsGWvoFqtWT5YMVquqFabteJz4rOLshjf+LnsKRdUqZhqmrXPg3QbiLKX3qvr9ctDxNoPNZkYR6QED8iflX63pi0WJpYFiXXxj/b3m5husiBbKyIniodcqESTp1u3/DO+b1j7vI3v2ncgHxWIiWJl7Tdol+Fmcl1Yt8wc1rbDJtLag8NnOfIzNvgPDl8/jzrvBvvItfVhcj2JddO3hc7kcjZZnE9+7nidGhddjIuhpk5Jfp0L7LoKRssVo9WUK0TOCdp1sC2s2mVuctk6/Hcse6nAa6rmqLfcOF5r3zd/12Lj32CyM6d9b3JbevhvB7B8YERT5eW//a5VOp296BWUvbVtYVPnjqb2+010mIw7jdrXpXXLilhry+Q8aaCeoF6tN+4smCMqRG9QUJZFLow5Yn/UxqHsiVNOW2S4o5e2b4V44hUXHLWYm/bx47OAb088/w5wyeQEkl4EvAjgYWecy/KZ19HUkRes9QvDZG9VnVfAdgdTFKLsF6mKzxU9wMLOdEi43Sgc2rdKPWrG8zf5M+q25yPvXPvDMs0zWUE3uUc3Jjfi66vr/YMVqgP1eGM42UNSDKAcHkIjUZY1RXkgndFRL9IsL1CP+qTha0c0dYF6+5CWKfoj1FulLA8xLPcz2LOPphR1MaDWjpRERRo+uSyGFL0+ZT/1pJb9krIUo9wzULY9SPnwb/v7qZhYuYt2Z14gLVAUCxTFIkXRp71GJZqU/LW9L+13hbWNWNvDMVjs5Z6Q1OPSJlP9vNMd7+B6YmEpDyV7qEJKvTN1lQ5jl/10Y9s2sbo/mrqhGqWkYbIXam1jHlx053/xvDv+jXurH9Dr9VjqL1FINDSMmhGr9QpSQb/o0Sv69Ip06wehdBhLbZKUlqGiKOipR1mULPYW2bO4h93D3ePXSpXUkZYRSdy7ci/7VvdRR00Q1E3N/tF+SqWRwCJi3CMaBKXK8byFCkT6WyjdZ6xg4nF+v/3cnYOduaexYbVZpWoqekWPXtGjVDn+v+qqZnW14u79d7IySqOJ1nXks2bS71ZqiKJH09REs8yuhSELC0sMhosM+kMK9dlRDhlEQVWNqKplmrqhVyxRIQ6N0jVslBBlKtzrSAN5DIo+i/0FFvqLLPUW2dHfkb9FlW4pETVN1DRRsdBbYFAMWKlWWB4dZGV1hZVqxMrqKitVRdVUjJqKghKFWG5WWSgWUYiBhpTqsVqPEGJB+Wa69UFWmhUqGvoapN9IPVZjJVX5hVjoDxgWC1TNKlVUjOoRo9zJ0+/1GPaHDHpDCkoGZZ9Br0+/N2DQS4/boe4ndnHUTc2gHLDUX2JYDo+4bUY7bR01B0YH6BU9FnuLnLZw2hEJlJmZbZ82/5ss8IpS9Ifluu3x+CBKQFWlI3fVqKapYn2xmfPYyQ6eNuHXRMHWBW0xWY3S77V8YJXRcs2Be1c5cM8KywdHLO0aMMpH5Nqcvc3xijIVUuk3Tfnnwq5+OiNgtRmf6dDkDp1UO6Q8E9aOvkHbibBWeEo5pxo143j3h71UuPXW9tnFBh2Px+SKo7817SNzzwKeHhG/np9fAVwSEVdtNP3evXvjpptumlr7zMzMzMzMTiQ/6pq5zV2Nd+xuByZvoHB2fs3MzMzMzMyOwbSLuRuB8yQ9QtIA+BXgw1Nug5mZmZmZ2dyb6jVzEVFJugq4nnRrgndGxK3TbIOZmZmZmdnJYOo30IiIjwEfm/b/a2ZmZmZmdjKZ9mmWZmZmZmZmtgVczJmZmZmZmc0hF3NmZmZmZmZzyMWcmZmZmZnZHHIxZ2ZmZmZmNodczJmZmZmZmc0hF3NmZmZmZmZzyMWcmZmZmZnZHHIxZ2ZmZmZmNodczJmZmZmZmc0hF3NmZmZmZmZzyMWcmZmZmZnZHHIxZ2ZmZmZmNodczJmZmZmZmc0hF3NmZmZmZmZzyMWcmZmZmZnZHFJEzLoNRyXpLuB/Zt0Om5k9wN2zboTNjOPfXY59tzn+3eb4d5djf3QPj4jTN3rjhC7mrNsk3RQRe2fdDpsNx7+7HPtuc/y7zfHvLsf++Pg0SzMzMzMzsznkYs7MzMzMzGwOuZizE9nbZ90AmynHv7sc+25z/LvN8e8ux/44+Jo5MzMzMzOzOeQjc2ZmZmZmZnPIxZyZmZmZTYUkzboNZicTF3M2U5LK/Ncb945xzLtN0qn5r/dDHSTpQkkLs26HzcTirBtgs+O8b+t5J2ozIekySe8BXiXpgeGLNztD0sWS3gH8gaQNb4BpJydJhaRTJH0EeDNARDQzbpZNkaTHSPoU8DrgtFm3x6ZH0qWSPgi8VdJT26TeusF53/ZxMWdTJ+lc4BrgX4GHA6+V9IzZtsq2m6RS0p+RRqu6AfhJ4DWSHjzbltm05MJtH9AHzpL0y+Cjcx3zKuADEfGLEXE7uIe+CyRdTtrv/wPwFeB5wANm2CSbIud928s7UJuFxwFfjoh3Ay8HbgGeKemhs2yUbbsC+BbwnBz73wEuxafcdM2jgLuBNwLPlbQrIhon9Ce3fFT2XGB/RLwxv/YUSbsBn3Z18ns0cGNE/C1wLalDZ/9sm2RT9FM479s2LuZs2+VTKx458dKNwNmSHhoRPyAdpbkH+KVZtM+2z2Gxb4DrIuKrkoYRcQfwHWDP7Fpo22ky/hOJ+teAVeC2/O/5kh7mU25OPpPxz0dl7wYeL+kZkj4EvIJ0uu3v52m8DJwkNtjvfxJ4tqRXA58HzgCukfTsmTTQtpWkn5d0laRL80s3Ag913rc9XMzZtpG0W9JHgY8Dz5G0M7+1DHwKeE5+/hXgS8ADfUH8yWGj2EdEHRH3AETEiqRdwCOAO2bYVNsGG8R/x0Sivhf4YUTcCtwKvAZ4m6S+T7c8OWwUf4CI+CHwLuC1wDsj4mnAXwOXTiR9NseOtt+PiFuApwPnAC+JiMtJCf3TJV0wm9baVpN0hqR/Al5JOo32XZKeFhHfAD6D875t4R2nbacdwPXAS/Pjn8mv3wV8Fni0pIsjogZuBy6LiOWZtNS22uGxf/wG01wC3BoRd0jaKem8aTbQttXR1n1Ip9rukvQ+0g7/ZuCrETHyYCgnjR8V/4+QEvr2eqmbgDuBlSm2z7bPUbf9EfE54HTgm/mlfwF2AQem20TbRnuBT0bE4yPitcCbgN/I730S533bwsWcbSlJV0p6gqRT8sXtbwfeTzoad7Gks/JK/BngP4E35J67C4FvSVqaWeNtU+4j9pdIOjNP18uz7Aa+LemFpFMwLpp+q22r3N/4k5L404H/BR4LvBg4373z8+1+xP8sgIj4Ium0yqsk7SENhPHjwPdm1HTbpGPY9g+BTwO/lWd9EmlEUyfzcyzH//Ic30+QrolsfQ/47/z4P3Dety3kU9Rts/K1MA8B/o50XdTXST1yL4uIu/M0l5EOr98UEddOzHs1cDZpdKMrI+IrU26+bcIxxv7GiHjvxLzXAs8F3gO8ISd5NkeOd92XtGfi/Z3AICK+P4OvYJuwyW3/7wHnAucBvxsRX5py820TNrHuX0g6tfohwAi4KiK+PP1vYJtxX/GX1I+IkaTfBn4sIn5zYl7nfVvMR+ZsUySV+VqYXcDtEfEkUk/790m9cwBExA2kUyvOl3Rqvl4KUg/tr0XEJV6h58txxP5RSvcYa6+d/ChpZMsXupCbP5tY93fknX0pqYiI/S7k5s9mt/0RcTWpiHuaC7n5cpyx3y1pMV8r+3zgBRHxJBdy8+d+xr89Zf4pwAfyfA/Kr70S531bysWcHZeciL0eeL2kJwDnAzVAPo3yZcBP5/da7wB2ki6M/pqkM/OgGPum3HzbhE3G/hPA1yWdERF/HxEfmHLzbZO2YN3/xsS672vk5sxWbfvz9KOpNt42ZQti/818qcWhPCCGzZFjiX9E1JIGpDESvirpT4GPS3pARFTO+7aWizk7Znklvpl07cvXSCOTjYCflXQxjIeh/uP8r/UM4CXAF4BH56HpbY5sQexvIcX+u1NrtG0Zr/vd5vh31xZu+2+fWqNtyxxj/P8kz7YAvIDUibsLeHK+LYFtsd59T2J2hAb4i4lz4B9LGmL+1cDbgMcpDTH+IeCJks6JiG+SLnJ+ckT8+0xabVvBse82x7/bHP/ucuy77VjjfzZwJvBe4OpIt6awbeIjc3Y8bgbeL6nMz28AHhYR7wZKSS/NPTRnA3XeoBMR/+gN+txz7LvN8e82x7+7HPtuO5b4NxHxnYj4XERc6UJu+7mYs2MWEQcjYiWfIw3pAte78uMXAhdI+ghwHfB5GI98ZHPOse82x7/bHP/ucuy77RjjfzM4/tPk0yztuOUemgAeDHw4v7wP+EPSfYNua8+PzyMf2UnCse82x7/bHP/ucuy7zfE/MfnInG1GA/SBu4HH5F6ZPyIdYv+UL3Q+qTn23eb4d5vj312Ofbc5/icg3zTcNkXSpcCn8793RcTfzLhJNiWOfbc5/t3m+HeXY99tjv+Jx8WcbUoesegK0mhFK7Nuj02PY99tjn+3Of7d5dh3m+N/4nExZ2ZmZmZmNod8zZyZmZmZmdkccjFnZmZmZmY2h1zMmZmZmZmZzSEXc2ZmZmZmZnPIxZyZmZmZmdkccjFnZmadI6mWdIukWyV9QdLLJf3IfaKkcyT96rTaaGZmdl9czJmZWRcdioiLIuJC4CnAzwGvuY95zgFczJmZ2QnD95kzM7POkbQ/InZOPD8XuBHYAzwcuBbYkd++KiI+LemzwAXAbcB7gDcDfw5cDgyBt0bEX03tS5iZWee5mDMzs845vJjLr90DnA/sA5qIWJZ0HnBdROyVdDnwioh4Zp7+RcCDIuJ1kobADcCzI+K2KX4VMzPrsN6sG2BmZnaC6QNvkXQRUAOPPMp0TwUeI+lZ+fmpwHmkI3dmZmbbzsWcmZl1Xj7Nsgb+j3Tt3J3AT5CuLV8+2mzASyPi+qk00szM7DAeAMXMzDpN0unAXwJviXTtwanAdyOiAa4AyjzpPmDXxKzXAy+W1M+f80hJOzAzM5sSH5kzM7MuWpR0C+mUyoo04MnV+b1rgA9KuhL4Z+BAfv2LQC3pC8C7gTeRRrj8vCQBdwG/MJ3mm5mZeQAUMzMzMzOzueTTLM3MzMzMzOaQizkzMzMzM7M55GLOzMzMzMxsDrmYMzMzMzMzm0Mu5szMzMzMzOaQizkzMzMzM7M55GLOzMzMzMxsDrmYMzMzMzMzm0P/DycHwigUKDVIAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1080x720 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "prices[prices.index >= \"2008-01-01\"].plot(figsize=(15,10));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Calculating the covariance matrix"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'1.4.0'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pypfopt\n",
    "pypfopt.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ACN</th>\n",
       "      <th>AMZN</th>\n",
       "      <th>COST</th>\n",
       "      <th>DIS</th>\n",
       "      <th>F</th>\n",
       "      <th>GILD</th>\n",
       "      <th>JPM</th>\n",
       "      <th>KO</th>\n",
       "      <th>LUV</th>\n",
       "      <th>MA</th>\n",
       "      <th>MSFT</th>\n",
       "      <th>PFE</th>\n",
       "      <th>TSLA</th>\n",
       "      <th>UNH</th>\n",
       "      <th>XOM</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>ACN</th>\n",
       "      <td>0.092632</td>\n",
       "      <td>0.045222</td>\n",
       "      <td>0.027420</td>\n",
       "      <td>0.041136</td>\n",
       "      <td>0.043728</td>\n",
       "      <td>0.029906</td>\n",
       "      <td>0.049748</td>\n",
       "      <td>0.020555</td>\n",
       "      <td>0.037300</td>\n",
       "      <td>0.045992</td>\n",
       "      <td>0.040781</td>\n",
       "      <td>0.026349</td>\n",
       "      <td>0.039622</td>\n",
       "      <td>0.030803</td>\n",
       "      <td>0.031405</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>AMZN</th>\n",
       "      <td>0.045222</td>\n",
       "      <td>0.343494</td>\n",
       "      <td>0.047852</td>\n",
       "      <td>0.055384</td>\n",
       "      <td>0.052702</td>\n",
       "      <td>0.061289</td>\n",
       "      <td>0.068269</td>\n",
       "      <td>0.020497</td>\n",
       "      <td>0.047922</td>\n",
       "      <td>0.057267</td>\n",
       "      <td>0.072572</td>\n",
       "      <td>0.032640</td>\n",
       "      <td>0.055948</td>\n",
       "      <td>0.035728</td>\n",
       "      <td>0.027309</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>COST</th>\n",
       "      <td>0.027420</td>\n",
       "      <td>0.047852</td>\n",
       "      <td>0.103043</td>\n",
       "      <td>0.032323</td>\n",
       "      <td>0.031280</td>\n",
       "      <td>0.027764</td>\n",
       "      <td>0.039449</td>\n",
       "      <td>0.021299</td>\n",
       "      <td>0.031869</td>\n",
       "      <td>0.032874</td>\n",
       "      <td>0.037152</td>\n",
       "      <td>0.025790</td>\n",
       "      <td>0.022850</td>\n",
       "      <td>0.027662</td>\n",
       "      <td>0.020850</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>DIS</th>\n",
       "      <td>0.041136</td>\n",
       "      <td>0.055384</td>\n",
       "      <td>0.032323</td>\n",
       "      <td>0.099902</td>\n",
       "      <td>0.040218</td>\n",
       "      <td>0.033266</td>\n",
       "      <td>0.047556</td>\n",
       "      <td>0.026385</td>\n",
       "      <td>0.038803</td>\n",
       "      <td>0.050691</td>\n",
       "      <td>0.042951</td>\n",
       "      <td>0.030051</td>\n",
       "      <td>0.037425</td>\n",
       "      <td>0.032662</td>\n",
       "      <td>0.025617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>0.043728</td>\n",
       "      <td>0.052702</td>\n",
       "      <td>0.031280</td>\n",
       "      <td>0.040218</td>\n",
       "      <td>0.124799</td>\n",
       "      <td>0.030711</td>\n",
       "      <td>0.054607</td>\n",
       "      <td>0.026455</td>\n",
       "      <td>0.045436</td>\n",
       "      <td>0.063188</td>\n",
       "      <td>0.041333</td>\n",
       "      <td>0.027786</td>\n",
       "      <td>0.049550</td>\n",
       "      <td>0.029579</td>\n",
       "      <td>0.027373</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>GILD</th>\n",
       "      <td>0.029906</td>\n",
       "      <td>0.061289</td>\n",
       "      <td>0.027764</td>\n",
       "      <td>0.033266</td>\n",
       "      <td>0.030711</td>\n",
       "      <td>0.243911</td>\n",
       "      <td>0.043923</td>\n",
       "      <td>0.016872</td>\n",
       "      <td>0.032021</td>\n",
       "      <td>0.034330</td>\n",
       "      <td>0.036330</td>\n",
       "      <td>0.033188</td>\n",
       "      <td>0.034865</td>\n",
       "      <td>0.034951</td>\n",
       "      <td>0.021699</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>JPM</th>\n",
       "      <td>0.049748</td>\n",
       "      <td>0.068269</td>\n",
       "      <td>0.039449</td>\n",
       "      <td>0.047556</td>\n",
       "      <td>0.054607</td>\n",
       "      <td>0.043923</td>\n",
       "      <td>0.130590</td>\n",
       "      <td>0.028210</td>\n",
       "      <td>0.049142</td>\n",
       "      <td>0.072991</td>\n",
       "      <td>0.050343</td>\n",
       "      <td>0.033541</td>\n",
       "      <td>0.041013</td>\n",
       "      <td>0.039428</td>\n",
       "      <td>0.033259</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>KO</th>\n",
       "      <td>0.020555</td>\n",
       "      <td>0.020497</td>\n",
       "      <td>0.021299</td>\n",
       "      <td>0.026385</td>\n",
       "      <td>0.026455</td>\n",
       "      <td>0.016872</td>\n",
       "      <td>0.028210</td>\n",
       "      <td>0.054270</td>\n",
       "      <td>0.023276</td>\n",
       "      <td>0.026849</td>\n",
       "      <td>0.028257</td>\n",
       "      <td>0.026512</td>\n",
       "      <td>0.020186</td>\n",
       "      <td>0.023216</td>\n",
       "      <td>0.020920</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>LUV</th>\n",
       "      <td>0.037300</td>\n",
       "      <td>0.047922</td>\n",
       "      <td>0.031869</td>\n",
       "      <td>0.038803</td>\n",
       "      <td>0.045436</td>\n",
       "      <td>0.032021</td>\n",
       "      <td>0.049142</td>\n",
       "      <td>0.023276</td>\n",
       "      <td>0.139199</td>\n",
       "      <td>0.048147</td>\n",
       "      <td>0.037210</td>\n",
       "      <td>0.026772</td>\n",
       "      <td>0.036284</td>\n",
       "      <td>0.033389</td>\n",
       "      <td>0.023149</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MA</th>\n",
       "      <td>0.045992</td>\n",
       "      <td>0.057267</td>\n",
       "      <td>0.032874</td>\n",
       "      <td>0.050691</td>\n",
       "      <td>0.063188</td>\n",
       "      <td>0.034330</td>\n",
       "      <td>0.072991</td>\n",
       "      <td>0.026849</td>\n",
       "      <td>0.048147</td>\n",
       "      <td>0.121321</td>\n",
       "      <td>0.049953</td>\n",
       "      <td>0.034302</td>\n",
       "      <td>0.047479</td>\n",
       "      <td>0.044907</td>\n",
       "      <td>0.043456</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>MSFT</th>\n",
       "      <td>0.040781</td>\n",
       "      <td>0.072572</td>\n",
       "      <td>0.037152</td>\n",
       "      <td>0.042951</td>\n",
       "      <td>0.041333</td>\n",
       "      <td>0.036330</td>\n",
       "      <td>0.050343</td>\n",
       "      <td>0.028257</td>\n",
       "      <td>0.037210</td>\n",
       "      <td>0.049953</td>\n",
       "      <td>0.116249</td>\n",
       "      <td>0.031407</td>\n",
       "      <td>0.045927</td>\n",
       "      <td>0.034455</td>\n",
       "      <td>0.029879</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>PFE</th>\n",
       "      <td>0.026349</td>\n",
       "      <td>0.032640</td>\n",
       "      <td>0.025790</td>\n",
       "      <td>0.030051</td>\n",
       "      <td>0.027786</td>\n",
       "      <td>0.033188</td>\n",
       "      <td>0.033541</td>\n",
       "      <td>0.026512</td>\n",
       "      <td>0.026772</td>\n",
       "      <td>0.034302</td>\n",
       "      <td>0.031407</td>\n",
       "      <td>0.076198</td>\n",
       "      <td>0.021108</td>\n",
       "      <td>0.028741</td>\n",
       "      <td>0.023489</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>TSLA</th>\n",
       "      <td>0.039622</td>\n",
       "      <td>0.055948</td>\n",
       "      <td>0.022850</td>\n",
       "      <td>0.037425</td>\n",
       "      <td>0.049550</td>\n",
       "      <td>0.034865</td>\n",
       "      <td>0.041013</td>\n",
       "      <td>0.020186</td>\n",
       "      <td>0.036284</td>\n",
       "      <td>0.047479</td>\n",
       "      <td>0.045927</td>\n",
       "      <td>0.021108</td>\n",
       "      <td>0.317409</td>\n",
       "      <td>0.033046</td>\n",
       "      <td>0.031579</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>UNH</th>\n",
       "      <td>0.030803</td>\n",
       "      <td>0.035728</td>\n",
       "      <td>0.027662</td>\n",
       "      <td>0.032662</td>\n",
       "      <td>0.029579</td>\n",
       "      <td>0.034951</td>\n",
       "      <td>0.039428</td>\n",
       "      <td>0.023216</td>\n",
       "      <td>0.033389</td>\n",
       "      <td>0.044907</td>\n",
       "      <td>0.034455</td>\n",
       "      <td>0.028741</td>\n",
       "      <td>0.033046</td>\n",
       "      <td>0.167136</td>\n",
       "      <td>0.022773</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>XOM</th>\n",
       "      <td>0.031405</td>\n",
       "      <td>0.027309</td>\n",
       "      <td>0.020850</td>\n",
       "      <td>0.025617</td>\n",
       "      <td>0.027373</td>\n",
       "      <td>0.021699</td>\n",
       "      <td>0.033259</td>\n",
       "      <td>0.020920</td>\n",
       "      <td>0.023149</td>\n",
       "      <td>0.043456</td>\n",
       "      <td>0.029879</td>\n",
       "      <td>0.023489</td>\n",
       "      <td>0.031579</td>\n",
       "      <td>0.022773</td>\n",
       "      <td>0.051136</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "           ACN      AMZN      COST       DIS         F      GILD       JPM  \\\n",
       "ACN   0.092632  0.045222  0.027420  0.041136  0.043728  0.029906  0.049748   \n",
       "AMZN  0.045222  0.343494  0.047852  0.055384  0.052702  0.061289  0.068269   \n",
       "COST  0.027420  0.047852  0.103043  0.032323  0.031280  0.027764  0.039449   \n",
       "DIS   0.041136  0.055384  0.032323  0.099902  0.040218  0.033266  0.047556   \n",
       "F     0.043728  0.052702  0.031280  0.040218  0.124799  0.030711  0.054607   \n",
       "GILD  0.029906  0.061289  0.027764  0.033266  0.030711  0.243911  0.043923   \n",
       "JPM   0.049748  0.068269  0.039449  0.047556  0.054607  0.043923  0.130590   \n",
       "KO    0.020555  0.020497  0.021299  0.026385  0.026455  0.016872  0.028210   \n",
       "LUV   0.037300  0.047922  0.031869  0.038803  0.045436  0.032021  0.049142   \n",
       "MA    0.045992  0.057267  0.032874  0.050691  0.063188  0.034330  0.072991   \n",
       "MSFT  0.040781  0.072572  0.037152  0.042951  0.041333  0.036330  0.050343   \n",
       "PFE   0.026349  0.032640  0.025790  0.030051  0.027786  0.033188  0.033541   \n",
       "TSLA  0.039622  0.055948  0.022850  0.037425  0.049550  0.034865  0.041013   \n",
       "UNH   0.030803  0.035728  0.027662  0.032662  0.029579  0.034951  0.039428   \n",
       "XOM   0.031405  0.027309  0.020850  0.025617  0.027373  0.021699  0.033259   \n",
       "\n",
       "            KO       LUV        MA      MSFT       PFE      TSLA       UNH  \\\n",
       "ACN   0.020555  0.037300  0.045992  0.040781  0.026349  0.039622  0.030803   \n",
       "AMZN  0.020497  0.047922  0.057267  0.072572  0.032640  0.055948  0.035728   \n",
       "COST  0.021299  0.031869  0.032874  0.037152  0.025790  0.022850  0.027662   \n",
       "DIS   0.026385  0.038803  0.050691  0.042951  0.030051  0.037425  0.032662   \n",
       "F     0.026455  0.045436  0.063188  0.041333  0.027786  0.049550  0.029579   \n",
       "GILD  0.016872  0.032021  0.034330  0.036330  0.033188  0.034865  0.034951   \n",
       "JPM   0.028210  0.049142  0.072991  0.050343  0.033541  0.041013  0.039428   \n",
       "KO    0.054270  0.023276  0.026849  0.028257  0.026512  0.020186  0.023216   \n",
       "LUV   0.023276  0.139199  0.048147  0.037210  0.026772  0.036284  0.033389   \n",
       "MA    0.026849  0.048147  0.121321  0.049953  0.034302  0.047479  0.044907   \n",
       "MSFT  0.028257  0.037210  0.049953  0.116249  0.031407  0.045927  0.034455   \n",
       "PFE   0.026512  0.026772  0.034302  0.031407  0.076198  0.021108  0.028741   \n",
       "TSLA  0.020186  0.036284  0.047479  0.045927  0.021108  0.317409  0.033046   \n",
       "UNH   0.023216  0.033389  0.044907  0.034455  0.028741  0.033046  0.167136   \n",
       "XOM   0.020920  0.023149  0.043456  0.029879  0.023489  0.031579  0.022773   \n",
       "\n",
       "           XOM  \n",
       "ACN   0.031405  \n",
       "AMZN  0.027309  \n",
       "COST  0.020850  \n",
       "DIS   0.025617  \n",
       "F     0.027373  \n",
       "GILD  0.021699  \n",
       "JPM   0.033259  \n",
       "KO    0.020920  \n",
       "LUV   0.023149  \n",
       "MA    0.043456  \n",
       "MSFT  0.029879  \n",
       "PFE   0.023489  \n",
       "TSLA  0.031579  \n",
       "UNH   0.022773  \n",
       "XOM   0.051136  "
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pypfopt import risk_models\n",
    "from pypfopt import plotting\n",
    "\n",
    "sample_cov = risk_models.sample_cov(prices, frequency=252)\n",
    "sample_cov"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plotting.plot_covariance(sample_cov, plot_correlation=True);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "For reasons discussed in the docs, the sample covariance matrix should not be your default choice. I think a better option is Ledoit-Wolf shrinkage, which reduces the extreme values in the covariance matrix. In the image below, we can see that there are fewer bright spots outside the diagonal:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "S = risk_models.CovarianceShrinkage(prices).ledoit_wolf()\n",
    "plotting.plot_covariance(S, plot_correlation=True);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Return estimation\n",
    "\n",
    "As discussed in the docs, it is often a bad idea to provide returns using a simple estimate like the mean of past returns. Unless you have a proprietary method for estimating returns, research suggests that you may be better off not providing expected returns – you can then just find the `min_volatility()` portfolio or use `HRP`. \n",
    "\n",
    "However, in this example we will use the CAPM returns, which aims to be slightly more stable than the default mean historical return. Please see the notebook `1-RiskReturnModels.ipynb` for more information."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "ACN     0.211835\n",
       "AMZN    0.364327\n",
       "COST    0.196707\n",
       "DIS     0.225129\n",
       "F       0.224453\n",
       "GILD    0.261351\n",
       "JPM     0.255334\n",
       "KO      0.149650\n",
       "LUV     0.228796\n",
       "MA      0.268048\n",
       "MSFT    0.241563\n",
       "PFE     0.180952\n",
       "TSLA    0.283734\n",
       "UNH     0.224482\n",
       "XOM     0.142013\n",
       "Name: mkt, dtype: float64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pypfopt import expected_returns\n",
    "\n",
    "mu = expected_returns.capm_return(prices)\n",
    "mu"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mu.plot.barh(figsize=(10,6));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Long/short min variance\n",
    "\n",
    "In this section, we construct a long/short portfolio with the objective of minimising variance. There is a good deal of research that demonstrates that these global-minimum variance (GMV) portfolios outperform mean-variance optimized portfolios."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "from pypfopt import EfficientFrontier"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('ACN', 0.23339),\n",
       "             ('AMZN', 0.00834),\n",
       "             ('COST', 0.09859),\n",
       "             ('DIS', -0.01636),\n",
       "             ('F', -0.01648),\n",
       "             ('GILD', 0.04163),\n",
       "             ('JPM', -0.05159),\n",
       "             ('KO', 0.12184),\n",
       "             ('LUV', 0.02395),\n",
       "             ('MA', 0.23815),\n",
       "             ('MSFT', 0.00328),\n",
       "             ('PFE', 0.06219),\n",
       "             ('TSLA', 0.15029),\n",
       "             ('UNH', 0.02962),\n",
       "             ('XOM', 0.07316)])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "S = risk_models.CovarianceShrinkage(prices).ledoit_wolf()\n",
    "\n",
    "# You don't have to provide expected returns in this case\n",
    "ef = EfficientFrontier(None, S, weight_bounds=(None, None))\n",
    "ef.min_volatility()\n",
    "weights = ef.clean_weights()\n",
    "weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.Series(weights).plot.barh();"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can get a quick indication of the portfolio performance as follows. Note that this is an in sample estimate and may have very little resemblance to how the portfolio actually performs!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Annual volatility: 11.8%\n"
     ]
    }
   ],
   "source": [
    "ef.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ACN</th>\n",
       "      <th>AMZN</th>\n",
       "      <th>COST</th>\n",
       "      <th>DIS</th>\n",
       "      <th>F</th>\n",
       "      <th>GILD</th>\n",
       "      <th>JPM</th>\n",
       "      <th>KO</th>\n",
       "      <th>LUV</th>\n",
       "      <th>MA</th>\n",
       "      <th>MSFT</th>\n",
       "      <th>PFE</th>\n",
       "      <th>TSLA</th>\n",
       "      <th>UNH</th>\n",
       "      <th>XOM</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>1962-01-02</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.058398</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.052365</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.107491</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1962-01-03</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.059182</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.051198</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.109087</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1962-01-04</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.059182</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.051587</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.109353</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1962-01-05</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.059378</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.050421</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.106959</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1962-01-08</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.059182</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.049902</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0.106693</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-08</th>\n",
       "      <td>257.309998</td>\n",
       "      <td>3322.939941</td>\n",
       "      <td>359.829987</td>\n",
       "      <td>190.000000</td>\n",
       "      <td>11.56</td>\n",
       "      <td>67.970001</td>\n",
       "      <td>140.139999</td>\n",
       "      <td>49.919998</td>\n",
       "      <td>52.240002</td>\n",
       "      <td>337.029999</td>\n",
       "      <td>242.470001</td>\n",
       "      <td>34.820000</td>\n",
       "      <td>863.419983</td>\n",
       "      <td>324.339996</td>\n",
       "      <td>51.230000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-09</th>\n",
       "      <td>257.679993</td>\n",
       "      <td>3305.000000</td>\n",
       "      <td>359.559998</td>\n",
       "      <td>188.210007</td>\n",
       "      <td>11.93</td>\n",
       "      <td>67.300003</td>\n",
       "      <td>139.580002</td>\n",
       "      <td>49.700001</td>\n",
       "      <td>51.180000</td>\n",
       "      <td>333.440002</td>\n",
       "      <td>243.770004</td>\n",
       "      <td>34.970001</td>\n",
       "      <td>849.460022</td>\n",
       "      <td>329.630005</td>\n",
       "      <td>50.630001</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-10</th>\n",
       "      <td>256.940002</td>\n",
       "      <td>3286.580078</td>\n",
       "      <td>356.119995</td>\n",
       "      <td>189.630005</td>\n",
       "      <td>11.76</td>\n",
       "      <td>67.290001</td>\n",
       "      <td>139.660004</td>\n",
       "      <td>49.599998</td>\n",
       "      <td>51.279999</td>\n",
       "      <td>334.209991</td>\n",
       "      <td>242.820007</td>\n",
       "      <td>34.740002</td>\n",
       "      <td>804.820007</td>\n",
       "      <td>333.399994</td>\n",
       "      <td>51.119999</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-11</th>\n",
       "      <td>258.970001</td>\n",
       "      <td>3262.129883</td>\n",
       "      <td>352.200012</td>\n",
       "      <td>190.910004</td>\n",
       "      <td>11.45</td>\n",
       "      <td>66.919998</td>\n",
       "      <td>139.270004</td>\n",
       "      <td>50.299999</td>\n",
       "      <td>51.419998</td>\n",
       "      <td>342.869995</td>\n",
       "      <td>244.490005</td>\n",
       "      <td>34.430000</td>\n",
       "      <td>811.659973</td>\n",
       "      <td>333.070007</td>\n",
       "      <td>49.840000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2021-02-12</th>\n",
       "      <td>257.470001</td>\n",
       "      <td>3277.709961</td>\n",
       "      <td>352.750000</td>\n",
       "      <td>187.669998</td>\n",
       "      <td>11.45</td>\n",
       "      <td>66.889999</td>\n",
       "      <td>141.250000</td>\n",
       "      <td>50.689999</td>\n",
       "      <td>51.340000</td>\n",
       "      <td>341.000000</td>\n",
       "      <td>244.990005</td>\n",
       "      <td>34.720001</td>\n",
       "      <td>816.119995</td>\n",
       "      <td>328.239990</td>\n",
       "      <td>50.520000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>14882 rows × 15 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                   ACN         AMZN        COST         DIS      F       GILD  \\\n",
       "Date                                                                            \n",
       "1962-01-02         NaN          NaN         NaN    0.058398    NaN        NaN   \n",
       "1962-01-03         NaN          NaN         NaN    0.059182    NaN        NaN   \n",
       "1962-01-04         NaN          NaN         NaN    0.059182    NaN        NaN   \n",
       "1962-01-05         NaN          NaN         NaN    0.059378    NaN        NaN   \n",
       "1962-01-08         NaN          NaN         NaN    0.059182    NaN        NaN   \n",
       "...                ...          ...         ...         ...    ...        ...   \n",
       "2021-02-08  257.309998  3322.939941  359.829987  190.000000  11.56  67.970001   \n",
       "2021-02-09  257.679993  3305.000000  359.559998  188.210007  11.93  67.300003   \n",
       "2021-02-10  256.940002  3286.580078  356.119995  189.630005  11.76  67.290001   \n",
       "2021-02-11  258.970001  3262.129883  352.200012  190.910004  11.45  66.919998   \n",
       "2021-02-12  257.470001  3277.709961  352.750000  187.669998  11.45  66.889999   \n",
       "\n",
       "                   JPM         KO        LUV          MA        MSFT  \\\n",
       "Date                                                                   \n",
       "1962-01-02         NaN   0.052365        NaN         NaN         NaN   \n",
       "1962-01-03         NaN   0.051198        NaN         NaN         NaN   \n",
       "1962-01-04         NaN   0.051587        NaN         NaN         NaN   \n",
       "1962-01-05         NaN   0.050421        NaN         NaN         NaN   \n",
       "1962-01-08         NaN   0.049902        NaN         NaN         NaN   \n",
       "...                ...        ...        ...         ...         ...   \n",
       "2021-02-08  140.139999  49.919998  52.240002  337.029999  242.470001   \n",
       "2021-02-09  139.580002  49.700001  51.180000  333.440002  243.770004   \n",
       "2021-02-10  139.660004  49.599998  51.279999  334.209991  242.820007   \n",
       "2021-02-11  139.270004  50.299999  51.419998  342.869995  244.490005   \n",
       "2021-02-12  141.250000  50.689999  51.340000  341.000000  244.990005   \n",
       "\n",
       "                  PFE        TSLA         UNH        XOM  \n",
       "Date                                                      \n",
       "1962-01-02        NaN         NaN         NaN   0.107491  \n",
       "1962-01-03        NaN         NaN         NaN   0.109087  \n",
       "1962-01-04        NaN         NaN         NaN   0.109353  \n",
       "1962-01-05        NaN         NaN         NaN   0.106959  \n",
       "1962-01-08        NaN         NaN         NaN   0.106693  \n",
       "...               ...         ...         ...        ...  \n",
       "2021-02-08  34.820000  863.419983  324.339996  51.230000  \n",
       "2021-02-09  34.970001  849.460022  329.630005  50.630001  \n",
       "2021-02-10  34.740002  804.820007  333.399994  51.119999  \n",
       "2021-02-11  34.430000  811.659973  333.070007  49.840000  \n",
       "2021-02-12  34.720001  816.119995  328.239990  50.520000  \n",
       "\n",
       "[14882 rows x 15 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "prices"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Let's say we were happy with this portfolio and wanted to actually go out and buy the shares.  To do this, we would need to construct a **discrete allocation** (unless your broker supports fractional shares!)\n",
    "\n",
    "If we had \\$20,0000 to invest and would like our portfolio to be 130/30 long/short, we can construct the actual allocation as follows:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Discrete allocation performed with $42.97 leftover\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'ACN': 17,\n",
       " 'COST': 5,\n",
       " 'GILD': 12,\n",
       " 'KO': 45,\n",
       " 'LUV': 9,\n",
       " 'MA': 13,\n",
       " 'MSFT': 1,\n",
       " 'PFE': 33,\n",
       " 'TSLA': 3,\n",
       " 'UNH': 2,\n",
       " 'XOM': 27,\n",
       " 'DIS': -6,\n",
       " 'F': -103,\n",
       " 'JPM': -26}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pypfopt import DiscreteAllocation\n",
    "\n",
    "latest_prices = prices.iloc[-1]  # prices as of the day you are allocating\n",
    "da = DiscreteAllocation(weights, latest_prices, total_portfolio_value=20000, short_ratio=0.3)\n",
    "alloc, leftover = da.lp_portfolio()\n",
    "print(f\"Discrete allocation performed with ${leftover:.2f} leftover\")\n",
    "alloc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Max Sharpe with sector constraints\n",
    "\n",
    "If you have your own model for returns (or have read the warnings and want to proceed anyways), you may consider maximising the Sharpe ratio. This theoretically gives the optimal portfolio in terms of risks-returns.\n",
    "\n",
    "In this section, we construct a long-only max-sharpe portfolio, but also incorporate sector constraints. Sector constraints require three things. A `sector_mapper`, your `sector_lower` bounds, and your `sector_upper` bounds."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "sector_mapper = {\n",
    "    \"MSFT\": \"Tech\",\n",
    "    \"AMZN\": \"Consumer Discretionary\",\n",
    "    \"KO\": \"Consumer Staples\",\n",
    "    \"MA\": \"Financial Services\",\n",
    "    \"COST\": \"Consumer Staples\",\n",
    "    \"LUV\": \"Aerospace\",\n",
    "    \"XOM\": \"Energy\",\n",
    "    \"PFE\": \"Healthcare\",\n",
    "    \"JPM\": \"Financial Services\",\n",
    "    \"UNH\": \"Healthcare\",\n",
    "    \"ACN\": \"Misc\",\n",
    "    \"DIS\": \"Media\",\n",
    "    \"GILD\": \"Healthcare\",\n",
    "    \"F\": \"Auto\",\n",
    "    \"TSLA\": \"Auto\"\n",
    "}\n",
    "\n",
    "sector_lower = {\n",
    "    \"Consumer Staples\": 0.1, # at least 10% to staples\n",
    "    \"Tech\": 0.05 # at least 5% to tech\n",
    "    # For all other sectors, it will be assumed there is no lower bound\n",
    "}\n",
    "\n",
    "sector_upper = {\n",
    "    \"Tech\": 0.2,\n",
    "    \"Aerospace\":0.1,\n",
    "    \"Energy\": 0.1,\n",
    "    \"Auto\":0.15\n",
    "}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We then set up the optimizer and add our constraints. We can use `ef.add_objective()` to add other constraints. For example, let's say that in addition to the above sector constraints, I specifically want:\n",
    "\n",
    "- 10% of the portfolio in AMZN\n",
    "- Less than 5% of my portfolio in TSLA"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "mu = expected_returns.capm_return(prices)\n",
    "S = risk_models.CovarianceShrinkage(prices).ledoit_wolf()\n",
    "\n",
    "ef = EfficientFrontier(mu, S)  # weight_bounds automatically set to (0, 1)\n",
    "ef.add_sector_constraints(sector_mapper, sector_lower, sector_upper)\n",
    "\n",
    "amzn_index = ef.tickers.index(\"AMZN\")\n",
    "ef.add_constraint(lambda w: w[amzn_index] == 0.10)\n",
    "\n",
    "tsla_index = ef.tickers.index(\"TSLA\")\n",
    "ef.add_constraint(lambda w: w[tsla_index] <= 0.05)\n",
    "\n",
    "ef.add_constraint(lambda w: w[10] >= 0.05)\n",
    "\n",
    "ef.max_sharpe()\n",
    "weights = ef.clean_weights()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('ACN', 0.16992),\n",
       "             ('AMZN', 0.1),\n",
       "             ('COST', 0.05577),\n",
       "             ('DIS', 0.0),\n",
       "             ('F', 0.0),\n",
       "             ('GILD', 0.05976),\n",
       "             ('JPM', 0.0),\n",
       "             ('KO', 0.04423),\n",
       "             ('LUV', 0.01928),\n",
       "             ('MA', 0.40059),\n",
       "             ('MSFT', 0.05),\n",
       "             ('PFE', 0.01916),\n",
       "             ('TSLA', 0.05),\n",
       "             ('UNH', 0.0313),\n",
       "             ('XOM', 0.0)])"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAIuCAYAAABZzclzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAACAfklEQVR4nO3dd1xc14E2/ufcGXrvQkgC9d5AvQAukusE27IllyR2inZXye67myXb92Wz/Hb3ffd12JKm7Hp3U+1EihvBUew4sYUEAjXUe++FDjMw7d7z+2OQjWUkUWbm3Jl5vp8PH8Ewc++DLcHDueeeI6SUICIiIgpXmuoARERERIHEskNERERhjWWHiIiIwhrLDhEREYU1lh0iIiIKayw7REREFNZYdoiIiCissewQERFRWGPZISIiorDGskNERERhjWWHiIiIwhrLDhEREYU1lh0iIiIKayw7REREFNZYdoiIiCissewQERFRWGPZISIiorDGskNERERhjWWHiIiIwhrLDhEREYU1lh0iIiIKayw7REREFNZYdoiIiCissewQERFRWGPZISIiorDGskNERERhjWWHiIiIwhrLDhEREYU1lh0iIiIKayw7REREFNZYdoiIiCissewQERFRWGPZISIiorDGskNERERhjWWHiIiIwhrLDhEREYU1lh0iIiIKayw7REREFNZYdoiI/EQI8YQQQgohpvV9XND38T/0e06mEMIjhPhO38fvCSH293u7KoTY2fe5HwohrgghYvq99ryCL40opLHsEBH5z3MA6vr+vOUcgMf6ffwMgCO3PpBSPiSlnCelnAdgOYAuAH/b7/k6gC8GKjBRJGDZISLyAyFEIoAVAL4E4Nl+n+oBcEwIsaDv43UANt/hMP8OYIuU8v1+j/0bgK8JIaz+TUwUOVh2iIj8owzAu1LKkwBahRBF/T73cwDPCiHGwjdSc/X2FwshngKwAMBf3fapi/CNFn0uIKmJIgDLDhGRfzwHX6lB35/9L2W9C2AVfCM+m25/oRAiD75RneellK4Bjv1/APwZ+D2baFg4LEpENEJCiHQA9wOYLYSQACwAJIDvAoCU0i2E2AugHMAMAJ/p91oB4EcA/q+U8uhAx5dSnhJC7AewNpBfB1G4YtkhIhq5pwH8REr5+7ceEELUAhjb7zlVAGqllG2+fvORrwNwSim/e49z/COA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Ironlh2iCFVZXpOJT5afW2VotMpcikkAl+ErNLfeTgA4XlFlu6IyGBENH8sOEX1CZXlNCj5ZfmYAmArfas8JCqP5Uy98c2s+KjO33q+osvWoDEZE/seyQ0SDVlleEwffre9ZfW/937/942wEpxwZANrh21Khpe/Pu73fCuAGF+wjihwsO0QUMH3l6FbxyQAQAyAKgLXvrf/7VgAafOXFgG/y7+1/6gC68MkS01FRZTOC9kURUchh2SEiIqKwpqkOQERERBRILDtEREQU1lh2iIiIKKyx7BAREVFYY9khIiKisMayQ0RERGGNZYeIiIjCGssOERERhTWWHSIiIgprLDtEREQU1lh2iIiIKKyx7BAREVFYY9khIiKisMayQ0RERGGNZYeIiIjCGssOERERhTWWHSIiIgprLDtEREQU1lh2iIiIKKyx7BAREVFYY9khIiKisMayQ0RERGGNZYeIiIjCGssOERERhTWWHSIiIgprLDtEREQU1lh2iIiIKKyx7BAREVFYY9khIiKisMayQ0RERGGNZYeIiIjCGssOERERhTWWHSIiIgprLDtEREQU1lh2iIiIKKyx7BAREVFYY9khIiKisMayQ0RERGGNZYeIiIjCGssOERERhTWWHSIiIgprLDtEREQU1lh2iIiIKKyx7BAREVFYY9khIiKisMayQ0RERGGNZYeIiIjCGssOERERhTWWHSIiIgprLDtEREQU1lh2iIiIKKyx7BAREVFYY9khIiKisMayQ0RERGGNZYeIiIjCGssOERERhTWWHSIiIgprLDtEREQU1lh2iIiIKKyx7BAREVFY+/8Bu/pO+9yftzoAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.Series(weights).plot.pie(figsize=(10,10));"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can immediately see that our explicit constraints were satisfied, and can check all the sector constraints as follows:\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Auto: 0.050\n",
      "Misc: 0.170\n",
      "Aerospace: 0.019\n",
      "Tech: 0.050\n",
      "Consumer Discretionary: 0.100\n",
      "Consumer Staples: 0.100\n",
      "Healthcare: 0.110\n",
      "Financial Services: 0.401\n",
      "Energy: 0.000\n",
      "Media: 0.000\n"
     ]
    }
   ],
   "source": [
    "# O(N^2) loop not a good idea in a coding interview :)\n",
    "for sector in set(sector_mapper.values()):\n",
    "    total_weight = 0\n",
    "    for t,w in weights.items():\n",
    "        if sector_mapper[t] == sector:\n",
    "            total_weight += w\n",
    "    print(f\"{sector}: {total_weight:.3f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Maximise return for a given risk, with L2 regularisation\n",
    "\n",
    "Let's imagine that we've put a lot of thought into our risk tolerance, and have decided that we can't accept anything more than 15% volatility. We can use PyPortfolioOpt to construct a portfolio that maximises return for a given risk (with the same caveats about expected returns)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('ACN', 0.0),\n",
       "             ('AMZN', 0.19559),\n",
       "             ('COST', 0.1),\n",
       "             ('DIS', 0.0),\n",
       "             ('F', 0.0),\n",
       "             ('GILD', 0.05459),\n",
       "             ('JPM', 0.0),\n",
       "             ('KO', 0.0),\n",
       "             ('LUV', 0.0),\n",
       "             ('MA', 0.44981),\n",
       "             ('MSFT', 0.05),\n",
       "             ('PFE', 0.0),\n",
       "             ('TSLA', 0.15),\n",
       "             ('UNH', 0.0),\n",
       "             ('XOM', 0.0)])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ef = EfficientFrontier(mu, S)\n",
    "ef.add_sector_constraints(sector_mapper, sector_lower, sector_upper)\n",
    "ef.efficient_risk(target_volatility=0.15)\n",
    "weights = ef.clean_weights()\n",
    "weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "9/15 tickers have zero weight\n"
     ]
    }
   ],
   "source": [
    "num_small = len([k for k in weights if weights[k] <= 1e-4])\n",
    "print(f\"{num_small}/{len(ef.tickers)} tickers have zero weight\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 28.0%\n",
      "Annual volatility: 15.0%\n",
      "Sharpe Ratio: 1.74\n"
     ]
    }
   ],
   "source": [
    "ef.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "While this portfolio seems like it meets our objectives, we might be worried by the fact that a lot of the tickers have been assigned zero weight. In effect, the optimizer is \"overfitting\" to the data you have provided -- you are much more likely to get better results by enforcing some level of diversification. One way of doing this is to use **L2 regularisation** – essentially, adding a penalty on the number of near-zero weights."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('ACN', 0.04657),\n",
       "             ('AMZN', 0.20993),\n",
       "             ('COST', 0.09026),\n",
       "             ('DIS', 0.00859),\n",
       "             ('F', 0.0),\n",
       "             ('GILD', 0.08339),\n",
       "             ('JPM', 0.04231),\n",
       "             ('KO', 0.00974),\n",
       "             ('LUV', 0.02584),\n",
       "             ('MA', 0.25121),\n",
       "             ('MSFT', 0.05),\n",
       "             ('PFE', 0.0),\n",
       "             ('TSLA', 0.15),\n",
       "             ('UNH', 0.03218),\n",
       "             ('XOM', 0.0)])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from pypfopt import objective_functions\n",
    "\n",
    "# You must always create a new efficient frontier object\n",
    "ef = EfficientFrontier(mu, S)\n",
    "ef.add_sector_constraints(sector_mapper, sector_lower, sector_upper)\n",
    "ef.add_objective(objective_functions.L2_reg, gamma=0.1)  # gamme is the tuning parameter\n",
    "ef.efficient_risk(0.15)\n",
    "weights = ef.clean_weights()\n",
    "weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3/15 tickers have zero weight\n"
     ]
    }
   ],
   "source": [
    "num_small = len([k for k in weights if weights[k] <= 1e-4])\n",
    "print(f\"{num_small}/{len(ef.tickers)} tickers have zero weight\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can tune the value of gamma to choose the number of nonzero tickers. Larger gamma pulls portfolio weights towards an equal allocation."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('ACN', 0.05574),\n",
       "             ('AMZN', 0.13199),\n",
       "             ('COST', 0.06176),\n",
       "             ('DIS', 0.06239),\n",
       "             ('F', 0.06018),\n",
       "             ('GILD', 0.0805),\n",
       "             ('JPM', 0.07749),\n",
       "             ('KO', 0.03824),\n",
       "             ('LUV', 0.06422),\n",
       "             ('MA', 0.08385),\n",
       "             ('MSFT', 0.07061),\n",
       "             ('PFE', 0.0403),\n",
       "             ('TSLA', 0.08982),\n",
       "             ('UNH', 0.06207),\n",
       "             ('XOM', 0.02083)])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ef = EfficientFrontier(mu, S)\n",
    "ef.add_sector_constraints(sector_mapper, sector_lower, sector_upper)\n",
    "ef.add_objective(objective_functions.L2_reg, gamma=1)  # gamme is the tuning parameter\n",
    "ef.efficient_risk(0.15)\n",
    "weights = ef.clean_weights()\n",
    "weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/Robert/Library/Caches/pypoetry/virtualenvs/pyportfolioopt-0mcST3QB-py3.8/lib/python3.8/site-packages/pandas/plotting/_matplotlib/core.py:1487: MatplotlibDeprecationWarning: normalize=None does not normalize if the sum is less than 1 but this behavior is deprecated since 3.3 until two minor releases later. After the deprecation period the default value will be normalize=True. To prevent normalization pass normalize=False \n",
      "  results = ax.pie(y, labels=blabels, **kwds)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x720 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.Series(weights).plot.pie(figsize=(10, 10));"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 25.0%\n",
      "Annual volatility: 14.8%\n",
      "Sharpe Ratio: 1.55\n"
     ]
    }
   ],
   "source": [
    "ef.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The resulting portfolio still has a volatility of less than our 15% limit. It's in-sample Sharpe ratio has gone down, but this portfolio is a lot more robust for actual investment."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Minimise risk for a given return, market-neutral\n",
    "\n",
    "We may instead be in the situation where we have a certain required rate of return (maybe we are a pension fund that needs 7% return a year), but would like to minimise risk. Additionally, suppose we would like our portfolio to be market neutral, in the sense that it is equally exposed to the long and short sides.  "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('ACN', -0.03364),\n",
       "             ('AMZN', 0.21501),\n",
       "             ('COST', -0.05815),\n",
       "             ('DIS', -0.00544),\n",
       "             ('F', -0.00802),\n",
       "             ('GILD', 0.04904),\n",
       "             ('JPM', 0.0435),\n",
       "             ('KO', -0.13562),\n",
       "             ('LUV', -0.0017),\n",
       "             ('MA', 0.06626),\n",
       "             ('MSFT', 0.01864),\n",
       "             ('PFE', -0.08174),\n",
       "             ('TSLA', 0.09114),\n",
       "             ('UNH', -0.00844),\n",
       "             ('XOM', -0.15083)])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Must have no weight bounds to allow shorts\n",
    "ef = EfficientFrontier(mu, S, weight_bounds=(None, None))\n",
    "ef.add_objective(objective_functions.L2_reg)\n",
    "ef.efficient_return(target_return=0.07, market_neutral=True)\n",
    "weights = ef.clean_weights()\n",
    "weights"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 7.0%\n",
      "Annual volatility: 10.3%\n",
      "Sharpe Ratio: 0.48\n"
     ]
    }
   ],
   "source": [
    "ef.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 720x432 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "pd.Series(weights).plot.barh(figsize=(10,6));"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Net weight: 0.00\n"
     ]
    }
   ],
   "source": [
    "print(f\"Net weight: {sum(weights.values()):.2f}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Efficient semi-variance optimization\n",
    "\n",
    "In this example, we will minimise the portfolio semivariance (i.e downside volatility) subject to a return constraint (target 20%).\n",
    "\n",
    "There are actually two ways of doing this in PyPortfolioOpt. The first is the \"intuitive\" way. We compute a semicovariance matrix, and pass this into `EfficientFrontier` (just like we would do for the exponential cov matrix or the Ledoit-Wolf shrunk matrix)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "semicov = risk_models.semicovariance(prices, benchmark=0)\n",
    "plotting.plot_covariance(semicov);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "OrderedDict([('ACN', 0.25166),\n",
       "             ('AMZN', 0.0),\n",
       "             ('COST', 0.08784),\n",
       "             ('DIS', 0.0),\n",
       "             ('F', 0.0),\n",
       "             ('GILD', 0.00688),\n",
       "             ('JPM', 0.0),\n",
       "             ('KO', 0.12619),\n",
       "             ('LUV', 0.0),\n",
       "             ('MA', 0.31295),\n",
       "             ('MSFT', 0.0),\n",
       "             ('PFE', 0.04611),\n",
       "             ('TSLA', 0.15944),\n",
       "             ('UNH', 0.0),\n",
       "             ('XOM', 0.00891)])"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ef = EfficientFrontier(mu, semicov)\n",
    "ef.efficient_return(0.2)\n",
    "weights = ef.clean_weights()\n",
    "weights\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 23.0%\n",
      "Annual volatility: 8.8%\n",
      "Sharpe Ratio: 2.38\n"
     ]
    }
   ],
   "source": [
    "ef.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "However, this solution is not truly optimal in mean-semivariance space. To do the optimization properly, we must use the `EfficientSemivariance` class. This requires us to first compute the returns and drop NaNs."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {},
   "outputs": [],
   "source": [
    "returns = expected_returns.returns_from_prices(prices)\n",
    "returns = returns.dropna()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 20.0%\n",
      "Annual semi-deviation: 10.3%\n",
      "Sortino Ratio: 1.75\n"
     ]
    }
   ],
   "source": [
    "from pypfopt import EfficientSemivariance\n",
    "\n",
    "es = EfficientSemivariance(mu, returns)\n",
    "es.efficient_return(0.2)\n",
    "es.portfolio_performance(verbose=True);\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "To compare this with the heuristic solution, I will use a quick hack: replacing the `es.weights` with `es.weights` and running `es.portfolio_performance` again. Please don't be encouraged to do this in real life!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 23.0%\n",
      "Annual semi-deviation: 14.4%\n",
      "Sortino Ratio: 1.45\n"
     ]
    }
   ],
   "source": [
    "es.weights = ef.weights\n",
    "es.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We see that the heuristic method has a significantly lower Sortino ratio, and much higher semivariance."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Efficient CVaR optimization\n",
    "\n",
    "In this example, we will find the portfolio that maximises return subject to a CVaR constraint.\n",
    "\n",
    "Before doing this, let's first compute the 95%-CVaR for the max-sharpe portfolio."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>ACN</th>\n",
       "      <th>AMZN</th>\n",
       "      <th>COST</th>\n",
       "      <th>DIS</th>\n",
       "      <th>F</th>\n",
       "      <th>GILD</th>\n",
       "      <th>JPM</th>\n",
       "      <th>KO</th>\n",
       "      <th>LUV</th>\n",
       "      <th>MA</th>\n",
       "      <th>MSFT</th>\n",
       "      <th>PFE</th>\n",
       "      <th>TSLA</th>\n",
       "      <th>UNH</th>\n",
       "      <th>XOM</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>Date</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2010-06-30</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.005985</td>\n",
       "      <td>-0.014380</td>\n",
       "      <td>-0.024768</td>\n",
       "      <td>0.020243</td>\n",
       "      <td>-0.019731</td>\n",
       "      <td>-0.012142</td>\n",
       "      <td>-0.004172</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.017045</td>\n",
       "      <td>-0.012870</td>\n",
       "      <td>-0.001401</td>\n",
       "      <td>-0.002512</td>\n",
       "      <td>-0.008033</td>\n",
       "      <td>-0.003840</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-07-01</th>\n",
       "      <td>-0.009573</td>\n",
       "      <td>0.015559</td>\n",
       "      <td>0.001276</td>\n",
       "      <td>-0.000317</td>\n",
       "      <td>0.048611</td>\n",
       "      <td>-0.004084</td>\n",
       "      <td>-0.013129</td>\n",
       "      <td>-0.001796</td>\n",
       "      <td>-0.010802</td>\n",
       "      <td>0.016652</td>\n",
       "      <td>0.006520</td>\n",
       "      <td>-0.002104</td>\n",
       "      <td>-0.078472</td>\n",
       "      <td>-0.019366</td>\n",
       "      <td>-0.008060</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-07-02</th>\n",
       "      <td>-0.008882</td>\n",
       "      <td>-0.016402</td>\n",
       "      <td>-0.012204</td>\n",
       "      <td>-0.003493</td>\n",
       "      <td>-0.027436</td>\n",
       "      <td>0.021383</td>\n",
       "      <td>-0.006929</td>\n",
       "      <td>0.000400</td>\n",
       "      <td>-0.021838</td>\n",
       "      <td>0.000345</td>\n",
       "      <td>0.004749</td>\n",
       "      <td>-0.006324</td>\n",
       "      <td>-0.125683</td>\n",
       "      <td>0.016158</td>\n",
       "      <td>-0.000707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-07-06</th>\n",
       "      <td>0.012388</td>\n",
       "      <td>0.008430</td>\n",
       "      <td>-0.004241</td>\n",
       "      <td>0.010835</td>\n",
       "      <td>-0.011673</td>\n",
       "      <td>-0.002868</td>\n",
       "      <td>0.013955</td>\n",
       "      <td>0.007593</td>\n",
       "      <td>-0.011163</td>\n",
       "      <td>-0.013513</td>\n",
       "      <td>0.023636</td>\n",
       "      <td>0.010608</td>\n",
       "      <td>-0.160938</td>\n",
       "      <td>0.020848</td>\n",
       "      <td>0.015733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2010-07-07</th>\n",
       "      <td>0.022129</td>\n",
       "      <td>0.030620</td>\n",
       "      <td>0.005371</td>\n",
       "      <td>0.044767</td>\n",
       "      <td>0.042323</td>\n",
       "      <td>0.004889</td>\n",
       "      <td>0.050096</td>\n",
       "      <td>0.020623</td>\n",
       "      <td>0.062088</td>\n",
       "      <td>0.037694</td>\n",
       "      <td>0.020151</td>\n",
       "      <td>0.023093</td>\n",
       "      <td>-0.019243</td>\n",
       "      <td>0.010730</td>\n",
       "      <td>0.016881</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                 ACN      AMZN      COST       DIS         F      GILD  \\\n",
       "Date                                                                     \n",
       "2010-06-30  0.000000  0.005985 -0.014380 -0.024768  0.020243 -0.019731   \n",
       "2010-07-01 -0.009573  0.015559  0.001276 -0.000317  0.048611 -0.004084   \n",
       "2010-07-02 -0.008882 -0.016402 -0.012204 -0.003493 -0.027436  0.021383   \n",
       "2010-07-06  0.012388  0.008430 -0.004241  0.010835 -0.011673 -0.002868   \n",
       "2010-07-07  0.022129  0.030620  0.005371  0.044767  0.042323  0.004889   \n",
       "\n",
       "                 JPM        KO       LUV        MA      MSFT       PFE  \\\n",
       "Date                                                                     \n",
       "2010-06-30 -0.012142 -0.004172  0.000000 -0.017045 -0.012870 -0.001401   \n",
       "2010-07-01 -0.013129 -0.001796 -0.010802  0.016652  0.006520 -0.002104   \n",
       "2010-07-02 -0.006929  0.000400 -0.021838  0.000345  0.004749 -0.006324   \n",
       "2010-07-06  0.013955  0.007593 -0.011163 -0.013513  0.023636  0.010608   \n",
       "2010-07-07  0.050096  0.020623  0.062088  0.037694  0.020151  0.023093   \n",
       "\n",
       "                TSLA       UNH       XOM  \n",
       "Date                                      \n",
       "2010-06-30 -0.002512 -0.008033 -0.003840  \n",
       "2010-07-01 -0.078472 -0.019366 -0.008060  \n",
       "2010-07-02 -0.125683  0.016158 -0.000707  \n",
       "2010-07-06 -0.160938  0.020848  0.015733  \n",
       "2010-07-07 -0.019243  0.010730  0.016881  "
      ]
     },
     "execution_count": 41,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "returns = expected_returns.returns_from_prices(prices).dropna()\n",
    "returns.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 25.8%\n",
      "Annual volatility: 12.8%\n",
      "Sharpe Ratio: 1.86\n"
     ]
    }
   ],
   "source": [
    "ef = EfficientFrontier(mu, S)\n",
    "ef.max_sharpe()\n",
    "weight_arr = ef.weights\n",
    "ef.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Compute CVaR\n",
    "portfolio_rets = (returns * weight_arr).sum(axis=1)\n",
    "portfolio_rets.hist(bins=50);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "VaR: -2.19%\n",
      "CVaR: -3.35%\n"
     ]
    }
   ],
   "source": [
    "# VaR\n",
    "var = portfolio_rets.quantile(0.05)\n",
    "cvar = portfolio_rets[portfolio_rets <= var].mean()\n",
    "print(\"VaR: {:.2f}%\".format(100*var))\n",
    "print(\"CVaR: {:.2f}%\".format(100*cvar))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This value of the CVaR means that our average loss on the worst 5% of days will be -3.35%. Let's say that this were beyond our comfort zone (for a \\\\$100,000 portfolio, this would mean losing \\\\$3350 in a day).\n",
    "\n",
    "Let's firstly construct the portfolio with the minimum CVaR:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 18.1%\n",
      "Conditional Value at Risk: 2.16%\n"
     ]
    }
   ],
   "source": [
    "from pypfopt import EfficientCVaR\n",
    "\n",
    "ec = EfficientCVaR(mu, returns)\n",
    "ec.min_cvar()\n",
    "ec.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We have significantly reduced the CVaR, but at the cost of a large reduction in returns. We can use `efficient_risk` to maximise the return for a target risk. Let's say that a 2.5% CVaR is acceptable."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 24.7%\n",
      "Conditional Value at Risk: 2.50%\n"
     ]
    }
   ],
   "source": [
    "from pypfopt import EfficientCVaR\n",
    "\n",
    "ec = EfficientCVaR(mu, returns)\n",
    "ec.efficient_risk(target_cvar=0.025)\n",
    "ec.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We now have similar returns to before (24.7% vs 25.8%), but with a lower tail risk (2.50% CVaR vs 3.35%). "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plotting - Unconstrained\n",
    "\n",
    "To plot the unconstrained efficient frontier, it is easiest to use the critical line algorithm. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Expected annual return: 25.6%\n",
      "Annual volatility: 12.7%\n",
      "Sharpe Ratio: 1.86\n"
     ]
    }
   ],
   "source": [
    "from pypfopt import CLA, plotting\n",
    "\n",
    "cla = CLA(mu, S)\n",
    "cla.max_sharpe()\n",
    "cla.portfolio_performance(verbose=True);"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = plotting.plot_efficient_frontier(cla, showfig=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plotting - Constrained"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this example, we will plot the efficient frontier corresponding to portfolios with a constraint on exposure to MSFT, AMZN, and TSLA (e.g maybe we want to avoid big tech)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [],
   "source": [
    "import cvxpy as cp\n",
    "\n",
    "mu = expected_returns.capm_return(prices)\n",
    "S = risk_models.CovarianceShrinkage(prices).ledoit_wolf()\n",
    "\n",
    "ef = EfficientFrontier(mu, S,)\n",
    "big_tech_indices = [t in {\"MSFT\", \"AMZN\", \"TSLA\"} for t in tickers]\n",
    "ef.add_constraint(lambda w: cp.sum(w[big_tech_indices]) <= 0.3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As per the docs, *before* we call any optimization function, we should pass this to the plotting module:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAagAAAEYCAYAAAAJeGK1AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAAmnElEQVR4nO3de3xU9Z3/8dfHEK7hKtiqhJulyC2AxImKF9gqYqugrbulSrWtF+zauPvz8TDFrbQ+XLeL6da6UB8C2mrr0qKtXaVXsV3QohKIkoDgBYhAAFu5iQRIyOXz+2MmcQi3CWRyzsy8n4/HPHLynXNmPnMS8uac8z3fr7k7IiIiYXNa0AWIiIgcjQJKRERCSQElIiKhpIASEZFQUkCJiEgotQu6gNbSu3dvHzBgQNBliIhIC73xxhs73b1P8/a0CagBAwZQWloadBkiItJCZrb5aO06xSciIqGkgBIRkVBSQImISCilzTWoo6mtrWXr1q1UV1cHXYq0ko4dO9K3b1+ys7ODLkVEkiytA2rr1q107dqVAQMGYGZBlyOnyN3ZtWsXW7duZeDAgUGXIyJJltan+Kqrqzn99NMVTmnCzDj99NN1RCySIdI6oACFU5rRz1MkHCorKyksLCQSiVBYWEhlZWWrv0dan+ITEZHWV1lZyahRo6iqqqK2tpaysjIWLFhAeXk5ubm5rfY+aX8EFbSsrCxGjx7d9Jg1axYAf/3rXxk+fDijR4/m4MGD3HPPPQwfPpx77rmHuXPn8vOf//yYr7l9+3auv/76k67pkUce4cCBA0d9rnldp+r73//+Yd9fdNFFp/yaIhKs4uLipnCCaIe0qqoqiouLW/V9LF0mLMzPz/fmI0m8/fbbDB06NKCKonJycqiqqjqi/Y477uDiiy9m2rRpAHTv3p3du3eTlZWV9JoaR93o3bv3CetqVFdXR7t2LT/gPtbnT4S74+6cdtrh/48Kw89VJJNFIhFWrlx51PaSkpIWv56ZveHu+c3bdQQVgCeeeIJnn32WmTNncuONNzJ58mSqqqoYO3YszzzzDPfffz//9V//BcCGDRu4/PLLGTVqFOeddx4bN25k06ZNjBgxAoD6+nruuecezj//fPLy8pg3bx4AS5cuZfz48Vx//fWce+653Hjjjbg7s2fPZvv27UyYMIEJEyYct66lS5dyySWXMHnyZIYNG0Z1dTVf//rXGTlyJGPGjGHJkiUAPPXUU3zxi19k0qRJDB48mKKiIgBmzJjBwYMHGT16NDfeeCMQDaxGP/jBD5rq/t73vgfApk2bGDJkCDfddBMjRoxIynltETk1BQUFR9zqkZ2dTSQSadX3yZhrUI8/v4aK7Xtb9TUHndWd264dedx1Gv9AN7r33nu59dZbWbZsGVdffXXTqbqcnBzKysoAuP/++5vWv/HGG5kxYwbXXXcd1dXVNDQ08OGHHzY9/5Of/ITu3buzcuVKampqGDduHBMnTgRg1apVrF27lrPOOotx48bx6quvctddd/Hwww+zZMmSI46gmte1dOlS3nzzTd566y0GDhzID3/4Q8yMNWvW8M477zBx4kTee+89AMrKyli1ahUdOnRgyJAhFBYWMmvWLH784x83fa54ixcvZv369axYsQJ3Z/Lkybzyyiv069eP9evX87Of/YwLLrgg0R+FiLShoqIiFixY0HSaLzs7m5ycnKb/nLaWjAmooHTq1Omof6ATsW/fPrZt28Z1110HRG9SbW7x4sWsXr2aX//61wDs3buX9evX0759eyKRCH379gVg9OjRbNq0iYsvvrhFNUQikaZ7jpYtW0ZhYSEA5557Lv37928KqM997nN0794dgGHDhrF58+bjXixdvHgxixcvZsyYMQBUVVWxfv16+vXrR//+/RVOIiGWm5tLeXk5xcXFrFixgkgkQlFRUat2kIAMCqgTHemkKndnzpw5XHnllYe1L126lA4dOjR9n5WVRV1dXYtfv0uXLgmt19L3cnfuvfdepk+fflj7pk2bEn5PEQlObm4uc+bMSep76BpUiHXt2pW+ffvy/PPPA1BTU3NE77srr7ySxx57rKk3zXvvvcf+/ftP+Lr79u1rcT2XXHIJCxYsaHqfLVu2MGTIkONuk52d3VRb87p/+tOfNnWg2LZt22GnLkVEFFBJ1ngNqvExY8aMFm3/9NNPM3v2bPLy8rjooov429/+dtjzt956K8OGDeO8885jxIgRTJ8+/YRHL7fffjuTJk06opPEifzzP/8zDQ0NjBw5ki9/+cs89dRThx05Heu98vLymjpJNJo4cSI33HADF154ISNHjuT6668/qdAUkfSlbuaScvRzFUkv6mYuIiIpRQElIiKhpIASEZFQSmpAmdkkM3vXzDaY2RG9A8zsDjNbY2ZlZrbM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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "ax = plotting.plot_efficient_frontier(ef, ef_param=\"risk\", \n",
    "                                      ef_param_range=np.linspace(0.12, 0.4, 50), \n",
    "                                      showfig=False);"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Complex plots\n",
    "\n",
    "The `plotting` module allows you to pass in an `ax`, on top of which the plots are added. This allows you to build complex plots. \n",
    "\n",
    "In this example, we will plot the efficient frontier as well as 10,000 simulated portfolios. \n",
    "\n",
    "To generate the simulated portfolios, we will sample random weights from the Dirichlet distribution (these are already normalised):"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Sample portfolio returns: [0.21286206 0.21820475 0.22013716 ... 0.21642456 0.23530824 0.24139073]\n",
      "Sample portfolio volatilities: [0.14446284 0.16609061 0.14438936 ... 0.14572046 0.16494929 0.13686405]\n"
     ]
    }
   ],
   "source": [
    "n_samples = 10000\n",
    "w = np.random.dirichlet(np.ones(len(mu)), n_samples)\n",
    "rets = w.dot(mu)\n",
    "stds = np.sqrt((w.T * (S @ w.T)).sum(axis=0))\n",
    "sharpes = rets / stds\n",
    "\n",
    "print(\"Sample portfolio returns:\", rets)\n",
    "print(\"Sample portfolio volatilities:\", stds)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Note that the above code is equivalent to generating samples via a for loop (just more efficient)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "# mus = []\n",
    "# stds = []\n",
    "# sharpes = []\n",
    "# for _ in range(10000):\n",
    "#     w = np.random.dirichlet(np.ones(len(mu)))\n",
    "#     # w = np.random.rand(len(mu))\n",
    "#     # w /= w.sum()\n",
    "#     ret = mu.dot(w)\n",
    "#     std = np.sqrt(w.dot(S @ w))\n",
    "#     mus.append(ret)\n",
    "#     stds.append(std)\n",
    "#     sharpes.append(ret / std)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Plot efficient frontier with Monte Carlo sim\n",
    "ef = EfficientFrontier(mu, S)\n",
    "\n",
    "fig, ax = plt.subplots()\n",
    "plotting.plot_efficient_frontier(ef, ax=ax, show_assets=False)\n",
    "\n",
    "# Find and plot the tangency portfolio\n",
    "ef.max_sharpe()\n",
    "ret_tangent, std_tangent, _ = ef.portfolio_performance()\n",
    "ax.scatter(std_tangent, ret_tangent, marker=\"*\", s=100, c=\"r\", label=\"Max Sharpe\")\n",
    "\n",
    "# Plot random portfolios\n",
    "ax.scatter(stds, rets, marker=\".\", c=sharpes, cmap=\"viridis_r\")\n",
    "\n",
    "# Format\n",
    "ax.set_title(\"Efficient Frontier with random portfolios\")\n",
    "ax.legend()\n",
    "plt.tight_layout()\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "pyportfolioopt",
   "language": "python",
   "name": "pyportfolioopt"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
